Uso de Lookup en MongoDB para Relaciones entre Colecciones
Clase 9 de 17 • Curso 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
.
-
Seleccionar lookup en Compass:
- Busca y selecciona
Lookup
. - Llena los campos necesarios:
- From:
Comments
- Local Field:
ID
- Foreign Field:
Movie ID
- As:
Comments
- From:
- Busca y selecciona
-
Ejemplo práctico:
- Con estos valores, MongoDB agregará un nuevo campo
Comments
en cada documento de la colecciónMovies
. - Este campo será un array con todos los comentarios relacionados al identificador de la película.
- Con estos valores, MongoDB agregará un nuevo campo
{
$lookup: {
from: "Comments",
localField: "ID",
foreignField: "Movie ID",
as: "Comments"
}
}
- 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") });
```.