Sie haben $unwind
ausgeführt zweimal, also müssen Sie zwei $group
verwenden .
{
$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"
}
}
}
}
- Erste Gruppe - um untergeordnete Objekte zu gruppieren. Aber Typ, Name und Header müssen auf übergeordnetes bzw. untergeordnetes Array gesetzt werden.
- Zweite Gruppe - um übergeordnete Objekte zu gruppieren. Wir erhalten alle eigenständigen Felder, während wir das Kind gruppieren. Hier müssen wir es nur in der richtigen Reihenfolge einrichten.
Arbeiten am Mongo-Spielplatz
Hinweis:Wenn Sie $lookup
verwenden , wird ein Array bereitgestellt. Aber es gibt einige Stellen, an denen Sie es einfach als Objekt machen. Ich weiß nicht, ob Sie in einer Eins-zu-eins-Beziehung beitreten oder nicht. In diesem Fall können Sie den Positionsoperator in der Projektion
verwenden oder arrayElemAt