Uso de Lookup en MongoDB para Relaciones entre Colecciones

Clase 9 de 17Curso de Base de Datos NoSQL

Resumen

Aprender a realizar joins en MongoDB usando el operador lookup puede parecer complejo, pero con la práctica se convierte en una herramienta poderosa para manejar datos relacionados. Exploraremos cómo y por qué usar joins en MongoDB, además de mostrar un ejemplo práctico.

¿Cómo se usa el join en MongoDB?

MongoDB implementa los joins a través del operador lookup, permitiendo relacionar documentos de diferentes colecciones. Aunque en bases de datos NoSQL no es común usar joins como en SQL, MongoDB ofrece flexibilidad y patrones de diseño específicos para relaciones entre documentos.

¿Por qué existen joins en bases de datos NoSQL?

Aunque las bases de datos NoSQL, como MongoDB, priorizan la flexibilidad y la escalabilidad sobre la normalización estricta de SQL, hay escenarios donde los joins son útiles. MongoDB permite estas relaciones para aprovechar los beneficios de cada tecnología, combinándolas según las necesidades del proyecto.

¿Cómo afecta el rendimiento el uso de lookup?

Usar muchos lookups en una única agregación puede considerarse un antipatrón, afectando negativamente el rendimiento. Es crucial diseñar esquemas eficientes y usar lookups solo cuando sea necesario, siguiendo buenas prácticas y patrones de diseño para relaciones uno a uno, uno a muchos y muchos a muchos.

¿Cómo se implementa un lookup en MongoDB?

Vamos a crear un join usando lookup en MongoDB Compass, relacionando la colección Comments con Movies mediante el campo Movie ID.

  1. Seleccionar lookup en Compass:

    • Busca y selecciona Lookup.
    • Llena los campos necesarios:
      • From: Comments
      • Local Field: ID
      • Foreign Field: Movie ID
      • As: Comments
  2. Ejemplo práctico:

    • Con estos valores, MongoDB agregará un nuevo campo Comments en cada documento de la colección Movies.
    • Este campo será un array con todos los comentarios relacionados al identificador de la película.
{
    $lookup: {
        from: "Comments",
        localField: "ID",
        foreignField: "Movie ID",
        as: "Comments"
    }
}
  1. Proyección de campos:
    • Proyecta solo los campos necesarios, por ejemplo, el título de la película y los comentarios.
    • Esto facilita la visualización de los datos importantes y mejora la eficiencia de la consulta.
{
    $project: {
        title: 1,
        comments: 1
    }
}

¿Cómo borrar documentos específicos en MongoDB?

Para eliminar documentos específicos, utiliza el comando delete many. A continuación, mostramos cómo borrar todos los comentarios relacionados con un Movie ID particular:

db.comments.deleteMany({ "Movie ID": ObjectId("valor_del_identificador") });
```.