MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да премахнете дубликати с определено условие в 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(); 
}

Сега и оттогава Синтаксисът „dropDups“ за създаване на индекс е „отхвърлен“ от MongoDB 2.6 и премахнат в MongoDB 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. Как да съхранявате геопространствена информация в mongoDB

  2. Как да премахнете минималната стойност в mongodb за група?

  3. как да създадете mongoDB objectid в java

  4. MongoDB получава всички полета + сортира по стойност, изчислена от множество полета

  5. next.js и mongodb atlas - получаване на връзки % от конфигурирания лимит е надхвърлил 80 сигнал