MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Saring array duplikat dan kembalikan array unik dalam agregasi 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"
        ]
      }
    }
  }
])

Saya menyarankan Anda untuk memasukkan bidang lain menggunakan first akumulator di group dan simpan di project .

Anda dapat menyederhanakan lebih lanjut seperti di bawah ini

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

Selanjutnya, beli melewatkan satu denormalisasi, Tapi itu mengembalikan array array.

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

Jika Anda melewati level lain, hasilnya akan bertambah satu level lagi.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. proyeksi tidak berfungsi dengan permintaan pencarian

  2. Tampilkan data ke halaman web yang diambil dari mongodb menggunakan node.js

  3. Bagaimana saya bisa mempertahankan nilai panjang nol selama fase $unwind dari pipa agregat di Mongo?

  4. Kriteria/agregasi:cari semua dokumen lengkap yang bidang arraynya memiliki elemen dengan status terbaru yang diberikan

  5. String Koneksi di MongoDB (dengan contoh)