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"
    }
  }

工作

正是我找不到的,谢谢!