微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mongodb 展开数组

如何解决Mongodb 展开数组

我有很多类似的文件

{
    "id": 1,"name": "a","namespace" : "a","version" : "1.1.1","otherStuff" : ...
    (20 more...)
},{
    "id": 2,"version" : "2.1.1","otherStuff" : ...
    ...
},{
    "id": 3,"name": "b","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: [...]
}

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

解决方法

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

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

工作Mongo playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。