Hablando de duplicidad, en alguna ocasión tuve que eliminar datos duplicados en MySQL y ya lo expliqué. Hoy explicaré cómo podemos eliminar duplicados en MongoDB, un gestor de base de datos que se compone de colecciones y que dentro de éstas aloja documentos.
Si sólo vienes por la solución, y no quieres ver el ejemplo, lo que tienes que ejecutar es esto:
db.coleccion.aggregate([
{ "$group": {
"_id": { "laClave": "$laClave" },
"dups": { "$push": "$_id" },
"count": { "$sum": 1 }
}},
{ "$match": { "count": { "$gt": 1 } }}
]).forEach(function(doc) {
doc.dups.shift();
db.coleccion.remove({ "_id": {"$in": doc.dups }});
});
Ahí “coleccion” es el nombre de tu colección. Y “laClave” es la clave que no quieres que se repita más de una vez.
Por cierto, haz un respaldo completo antes.
Quiero aclarar que la solución no es mía, yo sólo vengo a exponerla y a dar un ejemplo.
Para este ejemplo utilizaré una base de datos de libros, en donde no puede repetirse el ISBN. Por favor nota que sólo es un base de datos de ejemplo, no esperes que los datos rean reales; se trata de ilustrar.
Insertaré esto:
db.libros.insert([
{
titulo: "El silencio de los corderos",
paginas: 500,
isbn: "123"
},
{
titulo: "¿Sueñan los androides con ovejas eléctricas?",
paginas: 120,
isbn: "666"
},
{
titulo: "El juego de Ender",
paginas: 400,
isbn: "1234" // Notar que se repite el ISBN
},
{
titulo: "El principito",
paginas: 400,
isbn: "1234" // ISBN repetido aquí
},
])
Consultaré los datos para ver si se han insertado:
Hora de eliminar los repetidos. Nota: en este caso es un ejemplo algo raro, pero puede que en alguna ocasión nos falle sólo una palabra y tengamos que eliminar los duplicados.
Para eliminarlos, utilizo esto:
db.libros.aggregate([
{ "$group": {
"_id": { "isbn": "$isbn" },
"dups": { "$push": "$_id" },
"count": { "$sum": 1 }
}},
{ "$match": { "count": { "$gt": 1 } }}
]).forEach(function(doc) {
doc.dups.shift();
db.libros.remove({ "_id": {"$in": doc.dups }});
});
Ejecuto la “consulta”:
Y si vuelvo a consultar los datos existentes, veo esto:
En este caso utilizamos al ISBN para eliminar, pero podemos utilizar cualquier clave.
El día de hoy vamos a ver cómo restablecer la impresora térmica GOOJPRT PT-210 a…
Hoy voy a enseñarte cómo imprimir en una impresora térmica conectada por USB a una…
En este post voy a enseñarte a programar un servidor web en Android asegurándonos de…
En este post te quiero compartir un código de C++ para listar y cancelar trabajos…
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Esta web usa cookies.