Estoy utilizando MongoDB y necesito eliminar registros duplicados. Tengo una colección lista que se ve así: (simplificado)Eliminar registros duplicados usando MapReduce
[
{ "MlsId": "12345"" },
{ "MlsId": "12345" },
{ "MlsId": "23456" },
{ "MlsId": "23456" },
{ "MlsId": "0" },
{ "MlsId": "0" },
{ "MlsId": "" },
{ "MlsId": "" }
]
Una lista es un duplicado si el MlsId no es "" o "0" y otra lista tiene el mismo MlsId. Entonces, en el ejemplo anterior, los registros 2º y 4º deberían eliminarse.
¿Cómo puedo encontrar todas las listas duplicadas y eliminarlas? Empecé a buscar en MapReduce pero no pude encontrar un ejemplo que se ajustara a mi caso.
Esto es lo que tengo hasta ahora, pero no comprueba si el MlsId es "0" o "":
m = function() {
emit(this.MlsId, 1);
}
r = function (k, vals) {
return Array.sum(vals);
}
res = db.Listing.mapReduce(m,r);
db[res.result].find({value: {$gt: 1}});
db[res.result].drop();
puede que no sea capaz de responder a esto, pero si declaro las funciones M y R y luego ejecuta la función mapReduce y luego ejecuta el db [res.result] .drop(); comando, ¿va a soltar todos los listados o solo los que están duplicados? No entiendo mapReduce y emitir así que no sé cómo funciona todo esto ... – Justin
He hecho una pequeña corrección para reducir(). No estoy seguro de que hoe db.drop() funcione, pero sí, supongo que eliminará todos los entried para ese ID en particular. Pero espero que tu comprensión de la parte map-reduce sea clara. Aunque no estoy seguro de la sintaxis de mongodb ... veré si puedo resolver algo. –
Puede intentar agregar un índice con la opción Eliminar duplicados como se menciona aquí: http://www.mongodb.org/display/DOCS/ Índices Caerá automáticamente los valores duplicados.Otra forma es primero colocar() todos los valores y luego agregar un valor. –