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

Cách nhanh nhất để loại bỏ các tài liệu trùng lặp trong mongodb

dropDups: true tùy chọn không có sẵn trong 3.0.

Tôi có giải pháp với khung tổng hợp để thu thập các bản sao và sau đó xóa ngay lập tức.

Nó có thể hơi chậm hơn so với các thay đổi "chỉ mục" cấp hệ thống. Nhưng nó là tốt bằng cách xem xét cách bạn muốn loại bỏ các tài liệu trùng lặp.

một. Xóa tất cả tài liệu trong một lần

var duplicates = [];

db.collectionName.aggregate([
  { $match: { 
    name: { "$ne": '' }  // discard selection criteria
  }},
  { $group: { 
    _id: { name: "$name"}, // can be grouped on multiple properties 
    dups: { "$addToSet": "$_id" }, 
    count: { "$sum": 1 } 
  }},
  { $match: { 
    count: { "$gt": 1 }    // Duplicates considered as count greater than one
  }}
],
{allowDiskUse: true}       // For faster processing if set is larger
)               // You can display result until this and check duplicates 
.forEach(function(doc) {
    doc.dups.shift();      // First element skipped for deleting
    doc.dups.forEach( function(dupId){ 
        duplicates.push(dupId);   // Getting all duplicate ids
        }
    )
})

// If you want to Check all "_id" which you are deleting else print statement not needed
printjson(duplicates);     

// Remove all duplicates in one go    
db.collectionName.remove({_id:{$in:duplicates}})  

b. Bạn có thể xóa từng tài liệu một.

db.collectionName.aggregate([
  // discard selection criteria, You can remove "$match" section if you want
  { $match: { 
    source_references.key: { "$ne": '' }  
  }},
  { $group: { 
    _id: { source_references.key: "$source_references.key"}, // can be grouped on multiple properties 
    dups: { "$addToSet": "$_id" }, 
    count: { "$sum": 1 } 
  }}, 
  { $match: { 
    count: { "$gt": 1 }    // Duplicates considered as count greater than one
  }}
],
{allowDiskUse: true}       // For faster processing if set is larger
)               // You can display result until this and check duplicates 
.forEach(function(doc) {
    doc.dups.shift();      // First element skipped for deleting
    db.collectionName.remove({_id : {$in: doc.dups }});  // Delete remaining duplicates
})


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. insertMany Xử lý lỗi trùng lặp

  2. Truy vấn sau khi điền trong Mongoose

  3. MongoDB $ stdDevPop

  4. Thêm một số loại số hàng vào lệnh / đường ống tổng hợp mongodb

  5. MongoDB nguyên tử findOrCreate:findOne, chèn nếu không tồn tại, nhưng không cập nhật