Ho una collezione molto grande su MongoDB e voglio rimuovere il record duplicato da quella raccolta. Mi viene in mente un primo pensiero: eliminare l'indice e ricostruire l'indice con dropDups. Tuttavia, i dati duplicati sono troppi per essere gestiti da MongoDB.Come rimuovere il record duplicato in MongoDB da MapReduce?
Quindi mi rivolgo a MapReduce per chiedere aiuto. Ecco i miei progressi attuali.
m = function() {
emit(this.myid, 1);
}
r = function (k, vals) {
return Array.sum(vals);
}
res = db.userList.mapReduce(m,r, { out : "myoutput" });
E tutti i "myid" del record duplicato sono memorizzati nella raccolta "myoutput". Tuttavia, non so come rimuovere il record da userList facendo riferimento a myoutput.myid. Si suppone di essere qualcosa di simile:
db.myoutput.find({value: {$gt: 1}}).forEach(
function(obj) {
db.userList.remove(xxxxxxxxx) // I don't know how to do so
})
Btw, utilizzando foreach sembra cancellerà tutti i record con il myid sano di mente. Ma voglio solo rimuovere i record duplicati. Es:
{ "_id" : ObjectId("4edc6773e206a55d1c0000d8"), "myid" : 0 }
{ "_id" : ObjectId("4edc6780e206a55e6100011a"), "myid" : 0 }
{ "_id" : ObjectId("4edc6784e206a55ed30000c1"), "myid" : 0 }
Il risultato finale deve conservare solo un record. Qualcuno può darmi un aiuto su questo?
Grazie. :)
Grazie. Funziona. Tuttavia, ci sarà il record 3M nella raccolta myoutput. La velocità di esecuzione è estremamente lenta. È possibile accelerarlo? –