Zuerst müssen Sie Ihre Dokumente aktualisieren und difficultyrating
ändern und beatmapset_id
zur Fließkommazahl. Dazu müssen Sie jedes Dokument mit dem .forEach
Methode und aktualisieren Sie jedes Dokument mit "Bulk"
Operationen für maximale Effizienz..
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();
}
Jetzt und seitdem Die „dropDups“-Syntax für die Indexerstellung wurde ab MongoDB 2.6 „veraltet“ und in MongoDB 3.0 entfernt. So können Sie Duplikate entfernen.
Die Hauptidee hier ist, zuerst Ihr Dokument nach difficultyrating
zu sortieren in absteigender Reihenfolge.
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();
}
Diese Antwort decken Sie das Thema für weitere Details ab.