У меня очень большая коллекция на MongoDB, и я хочу удалить дубликат записи из этой коллекции.Первая мысль, которая приходит мне в голову - это удалить индекс и восстановить его с помощью dropDups.Тем не менее, дублированные данные слишком много для обработки MongoDB.
Поэтому я обращаюсь за помощью к MapReduce.Вот мой текущий прогресс.
m = function () {
emit(this.myid, 1);
}
r = function (k, vals) {
return Array.sum(vals);
}
res = db.userList.mapReduce(m,r, { out : "myoutput" });
И все "myid" дубликата записи хранятся в коллекции "myoutput".Однако я не знаю, как удалить запись из userList, ссылаясь на myoutput.myid.Предполагается, что это что-то вроде этого:
db.myoutput.find({value: {$gt: 1}}).forEach(
function(obj) {
db.userList.remove(xxxxxxxxx) // I don't know how to do so
})
Кстати, использование foreach, похоже, сотрет все записи со здравым смыслом myid.Но я просто хочу удалить дубликаты записей.Пример:
{ "_id" : ObjectId("4edc6773e206a55d1c0000d8"), "myid" : 0 }
{ "_id" : ObjectId("4edc6780e206a55e6100011a"), "myid" : 0 }
{ "_id" : ObjectId("4edc6784e206a55ed30000c1"), "myid" : 0 }
Окончательный результат должен сохранить только одну запись.Может ли кто-нибудь помочь мне в этом?
Спасибо.:)