Mongodb展开阵列
我有很多像这样的文件Mongodb展开阵列,mongodb,nosql,nosql-aggregation,Mongodb,Nosql,Nosql Aggregation,我有很多像这样的文件 { "id": 1, "name": "a", "namespace" : "a", "version" : "1.1.1", "otherStuff" : ... (20 more...) }, { "id": 2, "n
{
"id": 1,
"name": "a",
"namespace" : "a",
"version" : "1.1.1",
"otherStuff" : ...
(20 more...)
},
{
"id": 2,
"name": "a",
"namespace" : "a",
"version" : "2.1.1",
"otherStuff" : ...
...
},
{
"id": 3,
"name": "b",
"namespace" : "a",
"version" : "1.1.1",
"otherStuff" : ...
...
}
现在,我想将其聚合起来,以便只获取具有最高版本号的文档,并按(名称、命名空间)分组。我提出了以下内容,但是我想在java代码中使用它,我只是无法让它像第一步那样将最后一步展开到整个对象中
[
{$sort: {
"version": 1
}},
{$group: {
"_id": {
"name": "$name",
"namespace": "$namespace"
},
"version": { "$last": "$version" },
"object": { "$last": "$$ROOT" }
}},
{$sort: {
"object.namespace": 1,
"object.name":1
}},
{$project: {
object:1,
_id:0
}}
]
但这给了我:
{
object: [...],
object: [...]
}
我想要的是第一个示例中的表示,我只想选择ID2和ID3。
我尝试了$unwrap,但似乎我用错了,因为它只产生了与我的$project阶段相同的结果。您只需要使用
$replaceRoot
使对象作为最后一个阶段位于根目录中
{
"$replaceRoot": {
"newRoot": "$object"
}
}
工作正是我找不到的,谢谢!