MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Documento complexo agregado do Mongodb com pesquisas aninhadas


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"
      }
    }
  }
}
  1. Primeiro grupo - para agrupar objetos filho. Mas Tipo, Nome e Cabeçalho precisam ser definidos para matriz pai e filho, respectivamente.
  2. 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