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

Temukan semua dokumen duplikat dalam koleksi MongoDB dengan bidang kunci

Jawaban yang diterima sangat lambat pada koleksi besar, dan tidak mengembalikan _id s dari catatan duplikat.

Agregasi jauh lebih cepat dan dapat mengembalikan _id s:

db.collection.aggregate([
  { $group: {
    _id: { name: "$name" },   // replace `name` here twice
    uniqueIds: { $addToSet: "$_id" },
    count: { $sum: 1 } 
  } }, 
  { $match: { 
    count: { $gte: 2 } 
  } },
  { $sort : { count : -1} },
  { $limit : 10 }
]);

Pada tahap pertama dari alur agregasi, $groupoperator mengumpulkan dokumen dengan name bidang dan simpan di uniqueIds setiap _id nilai catatan yang dikelompokkan. Operator $sum menjumlahkan nilai bidang yang diteruskan ke sana, dalam hal ini konstanta 1 - dengan demikian menghitung jumlah record yang dikelompokkan ke dalam count lapangan.

Pada tahap kedua dari pipeline, kami menggunakan $matchuntuk memfilter dokumen dengan count minimal 2, yaitu duplikat.

Kemudian, kami mengurutkan duplikat yang paling sering terlebih dahulu, dan membatasi hasilnya hingga 10 teratas.

Kueri ini akan menghasilkan hingga $limit catatan dengan nama duplikat, bersama dengan _id their s. Misalnya:

{
  "_id" : {
    "name" : "Toothpick"
},
  "uniqueIds" : [
    "xzuzJd2qatfJCSvkN",
    "9bpewBsKbrGBQexv4",
    "fi3Gscg9M64BQdArv",
  ],
  "count" : 3
},
{
  "_id" : {
    "name" : "Broom"
  },
  "uniqueIds" : [
    "3vwny3YEj2qBsmmhA",
    "gJeWGcuX6Wk69oFYD"
  ],
  "count" : 2
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara terhubung ke MongoDB di Windows?

  2. Akses MongoDB langsung melalui JavaScript

  3. Cara menggunakan $regex dalam kueri agregasi mongodb dalam $match

  4. Cara menggabungkan bidang array dalam dokumen dalam agregasi Mongo

  5. Bagaimana cara terhubung dengan mongodb menggunakan sailsjs v0.10?