Mongodb 展开数组

Mongodb unwrap array

我有很多这样的文件

{
    "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: [...]
}

我要找的是第一个例子中的表示,我只想 select id 2 和 3。 我试过 $unwrap 但似乎我用错了,因为它产生的结果与我的 $project 阶段相同。

你只需要使用$replaceRoot让对象在Root中作为最后阶段

{
    "$replaceRoot": {
      "newRoot": "$object"
    }
  }

工作Mongo playground