mongodb - Mongodb展开数组
问题描述
我有很多文件,比如
{
"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: [...]
}
我正在寻找的是在我的第一个示例中的表示,我只想选择 id 2 和 3。我尝试了 $unwrap 但似乎我用错了,因为它产生的结果与我的 $project 阶段相同。
解决方案
推荐阅读
- content-management-system - 一个好的可扩展后端(CMS),你有什么推荐
- java - TextArea 控件 - 使用什么数据结构以及如何逐行获取
- excel - 从数组中的所有图表中添加或删除“预算”系列的 VBA
- powershell - 如果文本文件中包含字符串,则删除该行,然后删除接下来的两行
- java - 转换列表
到地图 > 使用 Lambda - swift - 元组比较如何在幕后工作
- excel - 通过 VBA 根据单元格值展开/缩小列
- symfony - ContextListener provider->refreshUser() 为 NULL
- android - 如何使用 UiAutomator2+Appium 从自定义 ListView 中获取文本?
- listview - Flutter上的函数获取Widget时无法在ListView.Builder上显示Widget