Направихте $unwind
два пъти, така че трябва да използвате две $group
.
{
$group: {
_id: {
secId: "$_id",
fId: "$Sections.id"
},
Type: {
$first: "$Type"
},
Name: {
$first: "$Name"
},
Header: {
$first: "$Sections.Header"
},
fieldItems: {
$push: "$Sections.FieldItems"
}
}
},
{
$group: {
_id: "$_id.secId",
Type: {
$first: "$Type"
},
Name: {
$first: "$Name"
},
Sections: {
$push: {
id: "$_id.fId",
Header: "$Header",
fieldItems: "$fieldItems"
}
}
}
}
- Първа група - за групиране на дъщерни обекти. Но Тип, име и заглавка трябва да бъдат зададени съответно на родителски и дъщерен масив.
- Втора група - за групиране на родителски обекти. Получаваме всяко самостоятелно поле, докато групираме дете. Тук само трябва да го настроим в правилния ред.
Работеща Mongo playground
Забележка:Когато използвате $lookup
, ще предостави масив. Но има места, които просто го правите като обект. Не знам дали се присъединявате към връзката едно към едно или не. Ако е така, можете да използвате позиционен оператор в проекция
или arrayElemAt