Du har gjort $unwind
två gånger, så du behöver använda två $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"
}
}
}
}
- Första gruppen - för att gruppera underordnade objekt. Men Typ, namn och rubrik måste ställas in på förälder respektive underordnad array.
- Andra grupp - för att gruppera överordnade objekt. Vi får alla fristående fält när vi grupperar barn. Här behöver vi bara ställa in den i rätt ordning.
Fungerar Mongo lekplats
Obs :När du använder $lookup
, kommer det att tillhandahålla en array. Men det finns vissa ställen du bara gör det som objekt. Jag vet inte om du går med i ett-till-en-förhållande eller inte. Om så är fallet kan du använda positionsoperator i projektion
eller arrayElemAt