Du har gjort $unwind
to gange, så du skal bruge to $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ørste gruppe - for at gruppere underordnede objekter. Men Type, navn og overskrift skal indstilles til henholdsvis overordnet og underordnet array.
- Anden gruppe - for at gruppere overordnede objekter. Vi får alle selvstændige felter, mens vi grupperer børn. Her mangler vi bare at sætte det op i de rigtige rækkefølger.
Arbejder Mongo legeplads
Bemærk:Når du bruger $lookup
, vil det give et array. Men der er nogle steder, man bare laver det som objekt. Jeg ved ikke, om du deltager i et-til-en forhold eller ej. I så fald kan du bruge positionsoperator i projektion
eller arrayElemAt