mongodb - 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 可以有多个记录,我只想检索最后一个。
解决方案
您可以使用$$ROOT
变量来获取整个最后一个文档
[
{ "$match": { "sender.category": "cat1" }},
{ "$sort": { "$createdAt": 1 }},
{ "$group": {
"_id": "$sender.id",
"lastrecord": {
"$last": "$$ROOT"
}
}}
]
推荐阅读
- html - 如何在 Angular 组件中使用嵌套的弹性框?
- typescript - 打字稿和异步调用
- python - 在字符串类型的列表中查找唯一值,然后将原始列表转换为等价的数字
- python - python - 如何将元素嵌套元组的矩阵拆分为Python中的块?
- ruby - 如何从源代码 https://github.com/cmedley/terraforming 构建和安装这个 gem 包?
- python - SQLAlchemy:通过辅助表建模同表关系
- html - 如何在可折叠内容中格式化无序列表
- c++ - 为什么这不是“调用'QQmlElement'的隐式删除默认构造函数中的默认构造函数
- sql-server - 检索特定列的计数,同时包括单行的主键
- docker - 无法在 Cloudera Quickstart Docker 上启动 Cloudera 服务