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

Bagaimana cara menghapus duplikat dengan kondisi tertentu di mongodb?

Pertama, Anda perlu memperbarui dokumen Anda dan mengubah difficultyrating dan beatmapset_id untuk nomor titik mengambang. Untuk melakukannya, Anda perlu mengulang setiap dokumen menggunakan .forEach metode dan perbarui setiap dokumen dengan "Bulk" operasi untuk efisiensi maksimum..

var bulk = db.collection.initializeOrderedBulkOp();
var count = 0;
db.collection.find().forEach(function(doc) { 
    bulk.find({ '_id': doc._id }).update({ 
        '$set': { 
            'beatmapset_id': parseFloat(doc.beatmapset_id), 
            'difficultyrating': parseFloat(doc.difficultyrating) 
        } 
    });
    count++; 
    if(count % 100 == 0) {     
        bulk.execute();     
        bulk = db.collection.initializeOrderedBulkOp(); 
    } 
})

if(count > 0) { 
    bulk.execute(); 
}

Sekarang dan sejak Sintaks "dropDups" untuk pembuatan indeks telah "tidak digunakan lagi" pada MongoDB 2.6 dan dihapus di MongoDB 3.0. Ini adalah bagaimana Anda dapat menghapus dups.

Ide utama di sini adalah pertama-tama mengurutkan dokumen Anda dengan difficultyrating dalam urutan menurun.

bulk  = db.collection.initializeUnorderedBulkOp();
count = 0;
db.collection.aggregate([
    { '$sort': { 'difficultyrating': -1 }}, 
    { '$group': { '_id': '$beatmapset_id', 'ids': { '$push': '$_id' }, 'count': { '$sum': 1 }}}, 
    { '$match': { 'count': { '$gt': 1 }}}
]).forEach(function(doc) {
    doc.ids.shift();
    bulk.find({'_id': { '$in': doc.ids }}).remove(); 
    count++; 
    if(count === 100) { 
        bulk.execute(); 
        bulk = db.collection.initializeUnorderedBulkOp();
    }
})

if(count !== 0) { 
    bulk.execute(); 
}

jawaban ini membahas topik untuk lebih detail.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kelompokkan Nilai dan Hitungan Berbeda untuk Setiap Properti dalam Satu Kueri

  2. Bagaimana cara memperbarui array yang sangat bersarang dengan C # MongoDB.Driver?

  3. Bingung tentang Terminologi Mongoose/Mongo. Apakah Sub-Dokumen/Dokumen Tertanam juga Koleksi?

  4. Bagaimana cara menghitung persentil?

  5. Bagaimana cara mendapatkan 5 dokumen terakhir secara berurutan?