Solución:
Esta respuesta es obsoleta: los dropDups
La opción se eliminó en MongoDB 3.0, por lo que se requerirá un enfoque diferente en la mayoría de los casos. Por ejemplo, puede usar la agregación como se sugiere en: Documentos duplicados de MongoDB incluso después de agregar una clave única.
Si está seguro de que source_references.key
identifica registros duplicados, puede garantizar un índice único con el dropDups:true
opción de creación de índice en MongoDB 2.6 o anterior:
db.things.ensureIndex({'source_references.key' : 1}, {unique : true, dropDups : true})
Esto mantendrá el primer documento único para cada source_references.key
valor y descarte cualquier documento posterior que de otro modo causaría una violación de clave duplicada.
Nota IMPORTANTE: Cualquier documento al que le falte source_references.key
Se considerará que el campo tiene un nulo valor, por lo que se eliminarán los documentos posteriores a los que les falte el campo clave. Puede agregar el sparse:true
Opción de creación de índice para que el índice solo se aplique a documentos con una source_references.key
campo.
Precaución obvia: Realice una copia de seguridad de su base de datos e intente esto en un entorno de prueba primero si le preocupa la pérdida de datos no intencionada.
Esta es la consulta más fácil que utilicé en mi MongoDB 3.2
db.myCollection.find({}, {myCustomKey:1}).sort({_id:1}).forEach(function(doc){
db.myCollection.remove({_id:{$gt:doc._id}, myCustomKey:doc.myCustomKey});
})
Indexe su customKey
antes de ejecutar esto para aumentar la velocidad
Si bien @ Stennie’s es una respuesta válida, no es la única forma. De hecho, el manual de MongoDB le pide que tenga mucho cuidado al hacer eso. Hay otras dos opciones
- Deje que MongoDB lo haga por usted usando Map Reduce
- De otra manera
- Haces programáticamente lo que es menos eficiente.