Как удалить дубликаты записей в MongoDB с помощью MapReduce?

У меня очень большая коллекция в 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 }

В конечном результате должна сохраниться только одна запись. Кто-нибудь может мне в этом помочь?

Спасибо. :)

5
задан Cheng-Lin Yang 6 December 2011 в 19:04
поделиться