Zrobiłeś $unwind
dwa razy, więc potrzebujesz dwóch $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"
}
}
}
}
- Pierwsza grupa — do grupowania obiektów podrzędnych. Ale Typ,Nazwa i Nagłówek muszą być ustawione odpowiednio na tablicę nadrzędną i podrzędną.
- Druga grupa — do grupowania obiektów nadrzędnych. Podczas grupowania dziecka otrzymujemy wszystkie samodzielne pola. Tutaj tylko musimy ustawić go w odpowiednich zamówieniach.
Pracujący plac zabaw Mongo
Uwaga :gdy używasz $lookup
, dostarczy tablicę. Ale są miejsca, w których po prostu robisz to jako obiekt. Nie wiem, czy łączysz się w relacji jeden-do-jednego, czy nie. Jeśli tak, możesz użyć operatora pozycyjnego w projekcji
lub arrayElemAt