I have a lot of documents like
{
"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" : ...
...
}
Now I want to aggregate this so that I only get the documents with the highest version number, grouped by (name, namespace). I came up with the following, however I want to use it in my java code and I just can't get it to work to unwrap the last step into the whole object like it is in the first step.
[
{$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
}}
]
But this gives me:
{
object: [...],
object: [...]
}
What I am looking for is the representation like in my first example, I just want to select id 2 and 3. I tried $unwrap but it seems I was using it wrong because it just yielded the same result as my $project stage.
question from:https://stackoverflow.com/questions/65842424/mongodb-unwrap-array