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

Hapus Duplikat saat menggunakan $unionWith di MongoDB

Di MongoDB, $unionWith tahap pipa agregasi melakukan penyatuan dua koleksi, dan itu termasuk duplikat.

Ini berperilaku dengan cara yang mirip dengan UNION ALL SQL , yang juga mencakup duplikat. Sebaliknya, hanya menggunakan UNION (yaitu tanpa ALL )di SQL menghapus duplikat.

Di MongoDB, kami tidak memiliki opsi untuk menentukan $unionWith ALL atau serupa, jadi kita perlu mengurangi duplikat dengan cara lain.

Di MongoDB, kita dapat menghapus duplikat dengan menggunakan $group panggung.

Contoh

Misalkan kita memasukkan dokumen-dokumen berikut ke dalam dua koleksi; yang disebut cats dan yang lain disebut dogs :

db.cats.insertMany([
    { _id: 1, name: "Fluffy", type: "Cat", weight: 5 },
    { _id: 2, name: "Scratch", type: "Cat", weight: 3 },
    { _id: 3, name: "Meow", type: "Cat", weight: 7 }
    ])

db.dogs.insertMany([
    { _id: 1, name: "Wag", type: "Dog", weight: 20 },
    { _id: 2, name: "Bark", type: "Dog", weight: 10 },
    { _id: 3, name: "Fluffy", type: "Dog", weight: 40 }
    ]) 

Dan misalkan kita menjalankan kueri berikut untuk mengembalikan semua nama dari kedua koleksi:

db.cats.aggregate( [
   { $project: { name: 1, _id: 0 } },
   { $unionWith: { coll: "dogs", pipeline: [ { $project: { name: 1, _id: 0 } } ]} }
] ) 

Hasil:

{ "name" :"Fluffy" }{ "name" :"Scratch" }{ "name" :"Meow" }{ "name" :"Wag" }{ "name" :"Bark" }{ " name" :"Fluffy" }

Kita bisa melihat bahwa nama Fluffy muncul dua kali. Ini karena ada dua Fluffy dalam koleksi kami – satu di cats koleksi dan satu di dogs koleksi.

Ini bagus jika kami senang memiliki nilai duplikat. Tapi bagaimana jika kita tidak melakukannya? Bagaimana jika kita hanya menginginkan daftar nama yang berbeda dari kedua koleksi?

Di situlah $group panggung masuk.

Kita dapat menambahkan $group panggung ke name kolom, sehingga terlihat seperti ini:

db.cats.aggregate( [
   { $project: { name: 1, _id: 0 } },
   { $unionWith: { coll: "dogs", pipeline: [ { $project: { name: 1, _id: 0 } } ]} },
   { $group: { _id: "$name" } }
] ) 

Hasil:

{ "_id" :"Meow" }{ "_id" :"Bark" }{ "_id" :"Scratch" }{ "_id" :"Wag" }{ "_id" :"Fluffy" } 

Kali ini kami hanya mendapatkan 5 dokumen, bukan 6, dan hanya ada satu Fluffy.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara memilih subdokumen dengan MongoDB

  2. NodeJS dan MongoDB FindAndModify() perlu dihapus atau diperbarui

  3. $pertama di mongodb

  4. Pembaruan Perubahan Lisensi SSL MongoDB

  5. Hapus Duplikat dari MongoDB