首页 > 解决方案 > MongoDB查询以获取每个id的最后一条记录

问题描述

我想使用 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 可以有多个记录,我只想检索最后一个。

标签: mongodbmongodb-queryaggregation-framework

解决方案


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

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

推荐阅读