MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongodb Aggregate Documento complesso con ricerche nidificate

Hai fatto $unwind due volte, quindi devi usare due $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. Primo gruppo - per raggruppare oggetti figlio. Ma Tipo, Nome e Intestazione devono essere impostati rispettivamente sull'array padre e figlio.
  2. Secondo gruppo - per raggruppare gli oggetti principali. Otteniamo tutti i campi autonomi durante il raggruppamento di bambini. Qui dobbiamo solo impostarlo negli ordini corretti.

parco giochi Mongo funzionante

Nota:quando usi $lookup , fornirà un array. Ma ci sono alcuni posti in cui lo fai semplicemente come oggetto. Non so se ti unisci a una relazione uno-a-uno o meno. In tal caso, puoi utilizzare operatore posizionale in proiezione o arrayElemAt