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"
}
}
我有很多这样的文件
{
"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"
}
}