Je hebt $unwind
gedaan twee keer, dus je moet twee $group
. gebruiken .
{
$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"
}
}
}
}
- Eerste groep - om onderliggende objecten te groeperen. Maar Type, naam en kop moeten worden ingesteld op respectievelijk parent- en child-array.
- Tweede groep - om bovenliggende objecten te groeperen. We krijgen alle op zichzelf staande velden terwijl we kind groeperen. Hier moeten we het alleen in de juiste volgorde instellen.
Werkende Mongo-speeltuin
Opmerking:wanneer u $lookup
. gebruikt , het zal een array opleveren. Maar op sommige plaatsen maak je het gewoon als object. Ik weet niet of je een een-op-een relatie hebt of niet. Als dit het geval is, kunt u de positionele operator in projectie
gebruiken of arrayElemAt