MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Odfiltruj zduplikowane tablice i zwróć unikalną tablicę w agregacji mongodb

db.collection.aggregate([
  {//Denormalize first level
    "$unwind": "$newList"
  },
  {//Second nested level
    "$unwind": "$newList.newPMBList"
  },
  {//Deep nested last level
    "$unwind": "$newList.newPMBList.newPMList"
  },
  {
    $group: {//Grouping back
      "_id": null,
      "newList": {
        $push: "$newList.newPMBList.newPMList"
      }
    }
  },
  {
    $project: {//Finding unique
      newList: {
        $setUnion: [
          "$newList",
          "$newList"
        ]
      }
    }
  }
])

Proponuję uwzględnić inne pola za pomocą first akumulator w group i zachowaj je w project .

Możesz uprościć dalej, jak poniżej

db.test.aggregate([
  {
    "$unwind": "$newList"
  },
  {
    "$unwind": "$newList.newPMBList"
  },
  {
    "$unwind": "$newList.newPMBList.newPMList"
  },
  {
    $group: {
      "_id": null,
      "newList": {//addToSet keeps distinct
        $addToSet: "$newList.newPMBList.newPMList"
      }
    }
  }
])

Co więcej, kup pominięcie jednej denormalizacji, ale zwraca ona tablicę tablic.

db.test.aggregate([
  {
    "$unwind": "$newList"
  },
  {
    "$unwind": "$newList.newPMBList"
  },
  {
    $group: {
      "_id": null,
      "newList": {
        $addToSet: "$newList.newPMBList.newPMList"
      }
    }
  }
])

Jeśli pominiesz kolejny poziom, do wyniku zostanie dodany jeszcze jeden zagnieżdżony poziom.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak przenieść do przodu instancję Google Compute Engine?

  2. mongo + pasażer:właściwy sposób na ponowne połączenie z bazą danych z poziomu kolei? jak zapewnić optymalną wydajność mongo?

  3. MongoDB na Ubuntu nie uruchamia się jako usługa, nic w dzienniku

  4. MongoDB Multikey Compound Index — Potrzebujesz pomocy w zrozumieniu ograniczeń

  5. Jak wstawić tę samą datę w mongodb jako odczytaną z String przez java?