Я уже разместил решение в своем вопросе. Исправлена ошибка, измененная для удаления только тогда, когда RegisterNumber и Region совпадают. Благодарю.
ел бы удалить дубликаты на robomongo, моя версия 3.0.12, поэтому я не могу использовать DropDups,
{
"_id" : ObjectId("id"),
"Name" : "No One",
"SituationDate" : "18-03-2017",
"Situation" : "ACTIVE",
"Region" : "13 REGION",
"RegisterNumber" : "7649",
"Version" : "20170517"
}
RegisterNumber должен быть уникальным, поэтому я хотел бы удалить в качестве дубликатов RegisterNumber.
РЕДАКТИРОВАТЬ: я только что обнаружил, что люди из разных регионов могут иметь один и тот же registerNumber ... Как я могу удалить только те, у которых оба RegisterNumber и Region одинаковы
Решение: Вот решение, данное @Neil Lunn с небольшими изменениями, я проверил его в коллекции под названиемTEST
и это сработало:
var bulk = db.getCollection('TEST').initializeOrderedBulkOp();
var count = 0;
db.getCollection('TEST').aggregate([
// Group on unique value storing _id values to array and count
{ "$group": {
"_id": { RegisterNumber: "$RegisterNumber", Region: "$Region" },
"ids": { "$push": "$_id" },
"count": { "$sum": 1 }
}},
// Only return things that matched more than once. i.e a duplicate
{ "$match": { "count": { "$gt": 1 } } }
]).forEach(function(doc) {
var keep = doc.ids.shift(); // takes the first _id from the array
bulk.find({ "_id": { "$in": doc.ids }}).remove(); // remove all remaining _id matches
count++;
if ( count % 500 == 0 ) { // only actually write per 500 operations
bulk.execute();
bulk = db.getCollection('TEST').initializeOrderedBulkOp(); // re-init after execute
}
});
// Clear any queued operations
if ( count % 500 != 0 )
bulk.execute();