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

Mongodb Aggregate Complex Document with Nested Lookups

Du har gjort $unwind to gange, så du skal bruge to $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. Første gruppe - for at gruppere underordnede objekter. Men Type, navn og overskrift skal indstilles til henholdsvis overordnet og underordnet array.
  2. Anden gruppe - for at gruppere overordnede objekter. Vi får alle selvstændige felter, mens vi grupperer børn. Her mangler vi bare at sætte det op i de rigtige rækkefølger.

Arbejder Mongo legeplads

Bemærk:Når du bruger $lookup , vil det give et array. Men der er nogle steder, man bare laver det som objekt. Jeg ved ikke, om du deltager i et-til-en forhold eller ej. I så fald kan du bruge positionsoperator i projektion eller arrayElemAt




  1. MongoDB - Projekt kun det matchende element i en matrix

  2. FEJL:underordnet proces mislykkedes, afsluttet med fejl nummer 1, mongodb

  3. MongoDB:kan ikke bruge en markør til at iterere gennem alle data

  4. Installation af MongoDB i WSL