Você fez
$unwind
duas vezes, então você precisa usar dois $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"
}
}
}
}
- Primeiro grupo - para agrupar objetos filho. Mas Tipo, Nome e Cabeçalho precisam ser definidos para matriz pai e filho, respectivamente.
- Segundo grupo - para agrupar objetos pai. Obtemos todos os campos autônomos ao agrupar filhos. Aqui só precisamos configurá-lo nas ordens corretas.
Trabalhando Mongo playground
Nota:Quando você usa
$lookup
, ele fornecerá uma matriz. Mas há alguns lugares que você apenas faz como objeto. Eu não sei se você se junta em um relacionamento um-para-um ou não. Nesse caso, você pode usar o operador posicional na projeção
ou arrayElemAt