Intenta entender el código de forma correcta antes de aplicarlo a tu proyecto si ttienes algo que aportar puedes comentarlo.
Solución:
Esta respuesta está obsoleta: la 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, podría usar la agregación como se sugiere en: Documentos duplicados de MongoDB incluso después de agregar documentos únicos key.
Si está seguro de que el 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
y elimine cualquier documento subsiguiente que de otro modo causaría un duplicado key violación.
Nota IMPORTANTE: Cualquier documento que falte source_references.key
Se considerará que el campo tiene un null valor, por lo que los documentos posteriores que faltan el key el campo será eliminado. Puedes agregar el sparse:true
opción de creación de índice para que el índice solo se aplique a documentos con un source_references.key
campo.
Precaución obvia: Realice una copia de seguridad de su base de datos y pruébelo primero en un entorno provisional si le preocupa la pérdida de datos no deseada.
Esta es la consulta más fácil que usé 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);
)
Indexa tu 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 hacerlo. Hay otras dos opciones
- Deje que MongoDB lo haga por usted usando Map Reduce
- De otra manera
- Lo haces programáticamente, lo que es menos eficiente.
Te mostramos comentarios y puntuaciones
Si haces scroll puedes encontrar las notas de otros programadores, tú todavía tienes la libertad de mostrar el tuyo si te gusta.