bases de datos

Eliminar documentos duplicados en MongoDB

Introducción

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.

Eliminar duplicados

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.

Ejemplo

Base de datos

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í
 },
])

Consultando

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.

Eliminando 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”:

Verificando eliminación

Y si vuelvo a consultar los datos existentes, veo esto:

¡Magia pura! ya no hay repetidos. Nos hemos quedado sólo con un dato. Esto funciona muy bien cuando tenemos documentos realmente repetidos, es decir, que todas sus claves sean idénticas; ya que de esta manera no importará cuál de ambos se elimine.

En este caso utilizamos al ISBN para eliminar, pero podemos utilizar cualquier clave.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

4 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

5 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

4 semanas hace

Esta web usa cookies.