В общем, при такой структуре:
{
"_id" : 3,
"info" : [
{
"k" : "c",
"v" : 353
},
{
"k" : "e",
"v" : 113
}
]
}
Вот решение:
db.test.drop();
db.test.insert({
"_id": 1,
"info": [{"k": "c", "v": 768}, {"k": "d", "v": 345}]
});
db.test.insert({
"_id": 2,
"info": [{"k": "e", "v": 333}]
});
db.test.insert({
"_id": 3,
"info": [{"k": "c", "v": 353}, {"k": "e", "v": 113}]
});
db.test.find().forEach(printjson);
var res = db.test.aggregate([
{$sort: {
"_id": 1
}},
{$unwind: "$info"},
{$group: {
"_id": "$info.k",
"v": {$last: "$info.v"}
}}
]);
printjson(res);
Вот результат выполнения aggregation:
{
"result" : [
{
"_id" : "e",
"v" : 113
},
{
"_id" : "d",
"v" : 345
},
{
"_id" : "c",
"v" : 353
}
],
"ok" : 1
}