MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongodb Agréger un document complexe avec des recherches imbriquées

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"
      }
    }
  }
}
  1. 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.
  2. 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