У меня очень большая коллекция в 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
})
Btw, использование foreach, кажется, сотрет все записи с одинаковым myid. Но я просто хочу удалить дублирующиеся записи. Ex:
{ "_id" : ObjectId("4edc6773e206a55d1c0000d8"), "myid" : 0 }
{ "_id" : ObjectId("4edc6780e206a55e6100011a"), "myid" : 0 }
{ "_id" : ObjectId("4edc6784e206a55ed30000c1"), "myid" : 0 }
В конечном результате должна сохраниться только одна запись. Кто-нибудь может мне в этом помочь?
Спасибо. :)