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

मोंगोडब में एक निश्चित शर्त के साथ डुप्लिकेट कैसे निकालें?

सबसे पहले आपको अपने दस्तावेज़ों को अपडेट करना होगा और difficultyrating . को बदलना होगा और beatmapset_id फ्लोट पॉइंट नंबर के लिए। ऐसा करने के लिए आपको .forEach विधि और प्रत्येक दस्तावेज़ को "बल्क" से अपडेट करें अधिकतम दक्षता के लिए संचालन..

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

अब और चूंकि इंडेक्स निर्माण के लिए "ड्रॉपडुप्स" सिंटैक्स को मोंगोडीबी 2.6 के रूप में "बहिष्कृत" किया गया है और मोंगोडीबी 3.0 में हटा दिया गया है। इस तरह आप नकल को हटा सकते हैं।

यहां मुख्य विचार यह है कि पहले अपने दस्तावेज़ को difficultyrating द्वारा क्रमबद्ध करें अवरोही क्रम में।

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

यह उत्तर अधिक विस्तार के लिए विषय को कवर करें।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो शेल में नंबरलॉन्ग अंकगणित

  2. MongoDB में कुल ($ ग्राफ लुकअप) तत्वों का मिलान कैसे करें?

  3. यह देखने का सबसे तेज़ तरीका क्या है कि MongoDB का अंतिम अपडेट कब किया गया था

  4. $lookup . के बाद तत्वों की सरणी के रूप में मान प्राप्त करें

  5. नेवले के खोज फ़ंक्शन के लिए क्वेरी ऑब्जेक्ट पैरामीटर में पारित अपरिभाषित मानों पर ध्यान न दें?