В рассмотрении коллекции у нас есть следующие документы с matchQuery {oid: somex}:
[{
_id: id1,
parentid:ParentId1,
somefields:<some values>
},
{
_id: id2,
parentid:ParentId1,
somefields:<some values>
},
{
_id: id3,
parentid:ParentId2,
somefields:<some values>
},
{
_id: id4,
parentid:ParentId3,
somefields:<some values>
},
{
_id: id5,
parentid:id1,
somefields:<some values>
},
{
_id: id6,
parentid: id1,
somefields:<some values>
},
{
_id: id7,
parentid: id2,
somefields:<some values>
},
{
_id: id8,
parentid: id3,
somefields:<some values>
},
{
_id: id9,
parentid: id3,
somefields:<some values>
},
{
_id: id10,
parentid: id4,
somefields:<some values>
},
{
_id: id11,
parentid: id5,
somefields:<some values>
},
{
_id: id12,
parentid: id5,
somefields:<some values>
},
{
_id: id13,
parentid: id5,
somefields:<some values>
},
{
_id: id14,
parentid: id13,
somefields:<some values>
},
{
_id: id15,
parentid: id13,
somefields:<some values>
},
]
Я могу достичь этого только на одном уровне, используя следующий агрегированный запрос:
db.random.aggregate([ { $match:{oid:"somex"}},{$group:{ _id:'$parentid', result: { $push: "$$ROOT" } } }]).toArray()
Таким образом, он выводится как плоская группировка на основе парентиды.Также группировка результатов только с parentId и его ближайшими дочерними документами.Я хочу также получить поля родительских документов, в идеале все поля родительского документа.
Поэтому я хочу сгруппировать его и получить как можно больше вложенного:
[{
_id: id1,
parentid:ParentId1,
somefields:<some values>,
children: [{
_id: id5,
parentid:id1,
somefields:<some values>,
children:[{
_id: id11,
parentid: id5,
somefields:<some values>
},
{
_id: id12,
parentid: id5,
somefields:<some values>
},
{
_id: id13,
parentid: id5,
somefields:<some values>,
children: [{
_id: id14,
parentid: id13,
somefields:<some values>
},
{
_id: id15,
parentid: id13,
somefields:<some values>
}]
}]
},
{
_id: id6,
parentid: id1,
somefields:<some values>
}]
},
{
_id: id2,
parentid:ParentId1,
somefields:<some values>,
children: [{
_id: id7,
parentid: id2,
somefields:<some values>
}]
},
{
_id: id3,
parentid:ParentId2,
somefields:<some values>,
children: [{
_id: id8,
parentid: id3,
somefields:<some values>
},
{
_id: id9,
parentid: id3,
somefields:<some values>
}]
},
{
_id: id4,
parentid:ParentId3,
somefields:<some values>,
children:[{
_id: id10,
parentid: id4,
somefields:<some values>
}]
}
]
Может кто-нибудьпредложить мне совокупный запрос для достижения ожидаемого результата?