MongoDB查询以获取每个ID的最后一条记录

时间:2019-12-17 06:07:29

标签: mongodb mongodb-query aggregation-framework

我想使用mongodb查询基于 createdAt 获得每个 sender.id 的最新记录。

示例json:

{
    "code" : "34242342",
    "name" : "name1",
    "amount" : 200,
    "sender" : {
        "id" : "fsrfsr3242",
        "name" : "name2",
        "phone" : "12345678",
        "category": "cat1"
    },
    "receiver" : {
        "id" : "42342rewr",
        "name" : "naem3",
        "phone" : "5653679755"
    },
    "message" : "",
    "status" : "done",
    "createdAt" : ISODate("2019-09-27T09:17:32.597Z")
}

我尝试过查询:

[{
    $match: {
        'sender.category': "cat1"
    }
}, {
    $group: {
        _id: "$sender.id",
        lastrecord: {
            $last: "$createdAt"
        }
    }
}]

我想返回整个json ,并且只返回每个sender.id的最后一条记录。上面的查询只给了我最后的日期,如何使用聚合管道返回整个json?

我正在使用 groupby ,因为每个sender.id可以有多个记录,而我只想检索最后一个。

1 个答案:

答案 0 :(得分:2)

您可以使用$$ROOT变量来获取整个最后一个文档

[
  { "$match": { "sender.category": "cat1" }},
  { "$sort": { "$createdAt": 1 }},
  { "$group": {
    "_id": "$sender.id",
    "lastrecord": {
      "$last": "$$ROOT"
    }
  }}
]