MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Агрегиран комплексен документ на Mongodb с вложени търсения

Направихте $unwind два пъти, така че трябва да използвате две $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. Първа група - за групиране на дъщерни обекти. Но Тип, име и заглавка трябва да бъдат зададени съответно на родителски и дъщерен масив.
  2. Втора група - за групиране на родителски обекти. Получаваме всяко самостоятелно поле, докато групираме дете. Тук само трябва да го настроим в правилния ред.

Работеща Mongo playground

Забележка:Когато използвате $lookup , ще предостави масив. Но има места, които просто го правите като обект. Не знам дали се присъединявате към връзката едно към едно или не. Ако е така, можете да използвате позиционен оператор в проекция или arrayElemAt




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. манипулирайте @ в низ за свързване на mongodb

  2. Съставни индекси за OR+Sort заявка в mongodb

  3. mongodb нежелано премахване на празно поле при актуализация

  4. Топологията за хвърляне на Монго беше унищожена след една връзка

  5. Meteor с помощта на Azure MongoDB