mongodb 在Mongo的捆绑数据中查找对象的最新数据

6rqinv9w  于 2022-11-22  发布在  Go
关注(0)|答案(1)|浏览(90)
[
  {
    "_id": "",
    "at": IsoDate(2022-11-19 10:00:00),
    "areaId": 3,
    "data": [
      {
        "name": "a",
        "sec": 34,
        "x": 10.3,
        "y": 23.3
      },
      {
        "name": "a",
        "sec": 36,
        "x": 10.3,
        "y": 23.3
      },
      {
        "name": "b",
        "sec": 37,
        "x": 10.3,
        "y": 23.3
      }
      ]
  },
  {
    "_id": "",
    "at": IsoDate(2022-11-19 10:00:00),
    "areaId": 3,
    "data": [
      {
        "name": "a",
        "sec": 10,
        "x": 10.3,
        "y": 23.3
      },
      {
        "name": "b",
        "sec": 12,
        "x": 10.3,
        "y": 23.3
      }
      ]
  }
  ]

我有一个表,它以分钟为单位显示人们在哪个区域的秒数,我的目标是找出具有指定名字的人最后一次出现在表现最好的区域的日期。
你能帮我吗?
输出示例:在面中找到“a”的最后日期=3
2022年11月19日10:01:10(含秒)

f87krz0w

f87krz0w1#

一个选项是:
1.使用前3个步骤查找匹配的文档
1.第4步是将秒添加到at日期

db.collection.aggregate([
  {$match: {data: {$elemMatch: {name: inputName}}}},
  {$sort: {at: -1}},
  {$limit: 1},
  {$project: {
      res: {
        $dateAdd: {
          startDate: "$at",
          unit: "second",
          amount: {$reduce: {
              input: "$data",
              initialValue: 0,
              in: {$cond: [
                  {$eq: ["$$this.name", inputName]},
                  {$max: ["$$this.sec", "$$value"]},
                  "$$value"
              ]}
          }}
        }
      }
  }}
])

了解它在playground example上的工作原理

相关问题