我有一个文件如下所示的集合.我想获得"_id"或每个组中按"name"分组的最大修订版本的整个文档.
{
"_id" : ObjectId("55aa088a58f2a8f2bd2a3793"),
"name" : "abc",
"revision" : 1
}
{
"_id" : ObjectId("55aa088a58f2a8f2bd2a3794"),
"name" : "abc",
"revision" : 2
}
{
"_id" : ObjectId("55aa088a58f2a8f2bd2a3795"),
"name" : "def",
"revision" : 1
}
{
"_id" : ObjectId("55aa088a58f2a8f2bd2a3796"),
"name" : "def",
"revision" : 2
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我只想选择第2和第4个文件.我尝试了各种方法,包括聚合框架,但不能完全在MongoDB查询中完成.
这有解决方案吗?
谢谢.
尝试使用以下聚合管道,首先按修订字段降序对文档进行排序,然后$group按名称字段对文档进行排序,通过$first在$$ROOT系统变量表达式上使用运算符添加另一个获取完整文档的字段:
db.collection.aggregate([
{
"$sort": {
"revision": -1
}
},
{
"$group": {
"_id": "$name",
"max_revision": {
"$max": "$revision"
},
"doc": {
"$first": "$$ROOT"
}
}
}
])
Run Code Online (Sandbox Code Playgroud)
输出:
/* 0 */
{
"result" : [
{
"_id" : "def",
"max_revision" : 2,
"doc" : {
"_id" : ObjectId("55aa088a58f2a8f2bd2a3796"),
"name" : "def",
"revision" : 2
}
},
{
"_id" : "abc",
"max_revision" : 2,
"doc" : {
"_id" : ObjectId("55aa088a58f2a8f2bd2a3794"),
"name" : "abc",
"revision" : 2
}
}
],
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2262 次 |
| 最近记录: |