Tengo una colección muy grande en MongoDB y quiero eliminar el registro duplicado de esa colección. Lo primero que se me viene a la mente es bajar el índice y reconstruir el índice con dropDups. Sin embargo, los datos duplicados son demasiados para ser manejados por MongoDB.¿Cómo eliminar registros duplicados en MongoDB de MapReduce?
Así que me dirijo a MapReduce para obtener ayuda. Aquí está mi progreso actual.
m = function() {
emit(this.myid, 1);
}
r = function (k, vals) {
return Array.sum(vals);
}
res = db.userList.mapReduce(m,r, { out : "myoutput" });
Y todos los "duplicados" del registro duplicado se almacenan en la colección "myoutput". Sin embargo, no sé cómo eliminar el registro de UserList haciendo referencia a myoutput.myid. Se supone que ser algo como esto:
db.myoutput.find({value: {$gt: 1}}).forEach(
function(obj) {
db.userList.remove(xxxxxxxxx) // I don't know how to do so
})
Por cierto, usando foreach parece borrará todos los registros con el myid cuerdo. Pero solo quiero eliminar registros duplicados. Ejemplo:
{ "_id" : ObjectId("4edc6773e206a55d1c0000d8"), "myid" : 0 }
{ "_id" : ObjectId("4edc6780e206a55e6100011a"), "myid" : 0 }
{ "_id" : ObjectId("4edc6784e206a55ed30000c1"), "myid" : 0 }
El resultado final debe conservar solo un registro. ¿Alguien puede ayudarme con esto?
Gracias. :)
Gracias. Funciona. Sin embargo, habrá un registro de 3M en la colección myoutput. La velocidad de ejecución es extremadamente lenta. ¿Es posible acelerarlo? –