MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm thế nào để loại bỏ các bản sao với một điều kiện nhất định trong mongodb?

Trước tiên, bạn cần cập nhật tài liệu của mình và thay đổi difficultyratingbeatmapset_id thành số dấu phẩy động. Để làm điều đó, bạn cần lặp lại từng tài liệu bằng .forEach và cập nhật từng tài liệu với "Bulk" hoạt động để đạt hiệu quả tối đa ..

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(); 
}

Hiện tại và kể từ Cú pháp "dropDups" để tạo chỉ mục đã "không được chấp nhận" kể từ MongoDB 2.6 và bị loại bỏ trong MongoDB 3.0. Đây là cách bạn có thể loại bỏ các vi phạm.

Ý tưởng chính ở đây trước tiên là sắp xếp tài liệu của bạn theo difficultyrating theo thứ tự giảm dần.

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(); 
}

câu trả lời này bao gồm chủ đề để biết thêm chi tiết.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chỉ mục trên trường ts trong oplog.rs không được cập nhật

  2. Không thể kết nối với cơ sở dữ liệu bản đồ MongoDB

  3. Nhận số lượng kết nối đang mở trong mongoDB bằng java

  4. mongo / node TypeError:callback không phải là một hàm trên truy vấn

  5. cập nhật cột của một bộ sưu tập trong mongodb