MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगोडब में डुप्लिकेट दस्तावेज़ों को निकालने का सबसे तेज़ तरीका

dropDups: true 3.0 में विकल्प उपलब्ध नहीं है।

मेरे पास डुप्लीकेट एकत्र करने और फिर एक बार में निकालने के लिए एकत्रीकरण ढांचे के साथ समाधान है।

यह सिस्टम स्तर "इंडेक्स" परिवर्तनों की तुलना में कुछ धीमा हो सकता है। लेकिन जिस तरह से आप डुप्लिकेट दस्तावेज़ों को हटाना चाहते हैं, उस पर विचार करना अच्छा है।

ए। सभी दस्तावेज़ एक बार में निकालें

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

बी। आप दस्तावेज़ों को एक-एक करके हटा सकते हैं।

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. एक ही MongoDB अपडेट में पुश और सेट ऑपरेशंस

  2. MongoDB से विश्वसनीय रूप से पुनः कनेक्ट करें

  3. डॉकर मोंगो डेटा वॉल्यूम कैसे सेट करें

  4. मैक ओएस एक्स पर मोंगोड को रोकने का एक साफ तरीका क्या है?

  5. अधिकतम दूरी और मोंगोडीबी के लिए उपयोग करने वाली इकाइयां?