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
_idde otro documento. - DBRefs: Son una forma especial de referencia que incluye el nombre de la colección y el
_iddel 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:
studentsycourses. - Inserta documentos en ambas colecciones.
- Establece una referencia manual en los documentos de
studentspara 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
