Vous avez fait $unwind
deux fois, vous devez donc utiliser deux $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"
}
}
}
}
- Premier groupe - pour regrouper les objets enfants. Mais Type, Nom et En-tête doivent être définis respectivement sur les tableaux parent et enfant.
- Deuxième groupe - pour regrouper les objets parents. Nous obtenons tous les champs autonomes lors du regroupement de l'enfant. Ici, nous avons juste besoin de le configurer dans les bons ordres.
Travailler aire de jeux Mongo
Remarque :Lorsque vous utilisez $lookup
, il fournira un tableau. Mais il y a des endroits où vous en faites simplement un objet. Je ne sais pas si vous vous joignez à une relation en tête-à-tête ou non. Si c'est le cas, vous pouvez utiliser opérateur positionnel en projection
ou arrayElemAt