我想使用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可以有多个记录,而我只想检索最后一个。
答案 0 :(得分:2)
您可以使用$$ROOT
变量来获取整个最后一个文档
[
{ "$match": { "sender.category": "cat1" }},
{ "$sort": { "$createdAt": 1 }},
{ "$group": {
"_id": "$sender.id",
"lastrecord": {
"$last": "$$ROOT"
}
}}
]