En MongoDB, los documentos pueden estar relacionados entre sí de varias maneras. Una de las formas más comunes de establecer relaciones entre documentos es mediante referencias. Las referencias permiten que un documento apunte a otro documento, lo que es útil para modelar relaciones entre entidades en una base de datos.
Conceptos Clave
- Referencias Manuales: Son referencias explícitas donde un documento contiene el
_id
de otro documento. - DBRefs: Son una forma especial de referencia que incluye el nombre de la colección y el
_id
del documento referenciado.
Referencias Manuales
Las referencias manuales son simples y directas. Un documento contiene el _id
de otro documento, lo que permite establecer una relación entre ellos.
Ejemplo Práctico
Supongamos que tenemos dos colecciones: authors
y books
. Queremos que cada libro tenga una referencia al autor que lo escribió.
// Documento en la colección "authors" { "_id": ObjectId("60c72b2f9b1d8b3f4c8b4567"), "name": "J.K. Rowling" } // Documento en la colección "books" { "title": "Harry Potter and the Philosopher's Stone", "author_id": ObjectId("60c72b2f9b1d8b3f4c8b4567") }
En este ejemplo, el documento del libro contiene un campo author_id
que almacena el _id
del autor correspondiente.
Consultas con Referencias Manuales
Para obtener el autor de un libro, primero necesitamos leer el documento del libro y luego usar el author_id
para buscar el autor en la colección authors
.
// Obtener el libro const book = db.books.findOne({ title: "Harry Potter and the Philosopher's Stone" }); // Obtener el autor usando el author_id del libro const author = db.authors.findOne({ _id: book.author_id }); print(`El autor del libro es: ${author.name}`);
DBRefs
DBRefs son una forma más estructurada de referencias en MongoDB. Incluyen el nombre de la colección y el _id
del documento referenciado.
Ejemplo Práctico
Usando el mismo ejemplo de authors
y books
, un DBRef se vería así:
// Documento en la colección "books" usando DBRef { "title": "Harry Potter and the Philosopher's Stone", "author": { "$ref": "authors", "$id": ObjectId("60c72b2f9b1d8b3f4c8b4567") } }
Consultas con DBRefs
Para resolver un DBRef, MongoDB no proporciona soporte automático en las consultas. Necesitamos realizar dos consultas manualmente, similar a las referencias manuales.
// Obtener el libro const book = db.books.findOne({ title: "Harry Potter and the Philosopher's Stone" }); // Obtener el autor usando el DBRef const author = db[book.author.$ref].findOne({ _id: book.author.$id }); print(`El autor del libro es: ${author.name}`);
Ejercicio Práctico
Ejercicio
- Crea dos colecciones:
students
ycourses
. - Inserta documentos en ambas colecciones.
- Establece una referencia manual en los documentos de
students
para apuntar a los cursos que están tomando. - Escribe una consulta para obtener el nombre del curso que está tomando un estudiante específico.
Solución
// Crear colecciones y documentos db.students.insertOne({ "_id": ObjectId("60c72b2f9b1d8b3f4c8b4568"), "name": "Alice", "course_id": ObjectId("60c72b2f9b1d8b3f4c8b4569") }); db.courses.insertOne({ "_id": ObjectId("60c72b2f9b1d8b3f4c8b4569"), "title": "Introduction to MongoDB" }); // Obtener el estudiante const student = db.students.findOne({ name: "Alice" }); // Obtener el curso usando el course_id del estudiante const course = db.courses.findOne({ _id: student.course_id }); print(`El curso que está tomando Alice es: ${course.title}`);
Conclusión
Las referencias en MongoDB son una herramienta poderosa para modelar relaciones entre documentos. Las referencias manuales son simples y directas, mientras que los DBRefs proporcionan una estructura más formal. Comprender cómo usar y consultar estas referencias es crucial para diseñar esquemas de datos eficientes y efectivos en MongoDB.
En el próximo tema, exploraremos los diferentes tipos de datos que se pueden utilizar en MongoDB, lo que nos permitirá aprovechar al máximo las capacidades de esta base de datos NoSQL.
Curso de MongoDB
Módulo 1: Introducción a MongoDB
Módulo 2: Operaciones CRUD en MongoDB
Módulo 3: Modelado de Datos en MongoDB
Módulo 4: Indexación y Agregación
Módulo 5: Características Avanzadas de MongoDB
Módulo 6: Rendimiento y Seguridad
- Optimización del Rendimiento
- Respaldo y Restauración
- Mejores Prácticas de Seguridad
- Monitoreo y Alertas