Introducción
En MongoDB, los documentos anidados permiten almacenar documentos dentro de otros documentos. Esta característica es una de las principales ventajas de MongoDB sobre las bases de datos relacionales, ya que permite una estructura de datos más flexible y natural. En esta sección, aprenderemos qué son los documentos anidados, cómo crearlos y cómo trabajar con ellos.
¿Qué son los Documentos Anidados?
Los documentos anidados son documentos que se encuentran dentro de otros documentos. Esto permite representar relaciones jerárquicas y estructuras complejas de datos de una manera más intuitiva y eficiente.
Ejemplo de Documento Anidado
{ "nombre": "Juan Pérez", "edad": 30, "dirección": { "calle": "Calle Falsa 123", "ciudad": "Springfield", "país": "USA" }, "contacto": { "teléfono": "555-1234", "email": "[email protected]" } }
En este ejemplo, el documento principal contiene dos documentos anidados: dirección
y contacto
.
Creando Documentos Anidados
Para crear documentos anidados en MongoDB, simplemente incluimos un documento dentro de otro documento al momento de la inserción.
Ejemplo en JavaScript (Node.js)
const { MongoClient } = require('mongodb'); async function run() { const uri = "mongodb://localhost:27017"; const client = new MongoClient(uri); try { await client.connect(); const database = client.db('miBaseDeDatos'); const collection = database.collection('usuarios'); const nuevoUsuario = { nombre: "Juan Pérez", edad: 30, dirección: { calle: "Calle Falsa 123", ciudad: "Springfield", país: "USA" }, contacto: { teléfono: "555-1234", email: "[email protected]" } }; const resultado = await collection.insertOne(nuevoUsuario); console.log(`Documento insertado con el _id: ${resultado.insertedId}`); } finally { await client.close(); } } run().catch(console.dir);
En este ejemplo, estamos insertando un documento con dos documentos anidados (dirección
y contacto
) en la colección usuarios
.
Leyendo Documentos Anidados
Para leer documentos anidados, utilizamos la misma sintaxis que para leer documentos simples, pero especificamos el campo anidado utilizando la notación de punto.
Ejemplo en JavaScript (Node.js)
async function leerDocumento() { const uri = "mongodb://localhost:27017"; const client = new MongoClient(uri); try { await client.connect(); const database = client.db('miBaseDeDatos'); const collection = database.collection('usuarios'); const usuario = await collection.findOne({ "nombre": "Juan Pérez" }); console.log(usuario); } finally { await client.close(); } } leerDocumento().catch(console.dir);
En este ejemplo, estamos leyendo un documento de la colección usuarios
donde el campo nombre
es "Juan Pérez".
Actualizando Documentos Anidados
Para actualizar documentos anidados, utilizamos la notación de punto para especificar el campo anidado que queremos actualizar.
Ejemplo en JavaScript (Node.js)
async function actualizarDocumento() { const uri = "mongodb://localhost:27017"; const client = new MongoClient(uri); try { await client.connect(); const database = client.db('miBaseDeDatos'); const collection = database.collection('usuarios'); const filtro = { "nombre": "Juan Pérez" }; const actualización = { $set: { "dirección.ciudad": "Shelbyville" } }; const resultado = await collection.updateOne(filtro, actualización); console.log(`Documentos actualizados: ${resultado.modifiedCount}`); } finally { await client.close(); } } actualizarDocumento().catch(console.dir);
En este ejemplo, estamos actualizando el campo ciudad
del documento anidado dirección
para el usuario "Juan Pérez".
Eliminando Documentos Anidados
Para eliminar campos de documentos anidados, utilizamos la notación de punto con el operador $unset
.
Ejemplo en JavaScript (Node.js)
async function eliminarCampoAnidado() { const uri = "mongodb://localhost:27017"; const client = new MongoClient(uri); try { await client.connect(); const database = client.db('miBaseDeDatos'); const collection = database.collection('usuarios'); const filtro = { "nombre": "Juan Pérez" }; const eliminación = { $unset: { "contacto.teléfono": "" } }; const resultado = await collection.updateOne(filtro, eliminación); console.log(`Documentos actualizados: ${resultado.modifiedCount}`); } finally { await client.close(); } } eliminarCampoAnidado().catch(console.dir);
En este ejemplo, estamos eliminando el campo teléfono
del documento anidado contacto
para el usuario "Juan Pérez".
Ejercicios Prácticos
Ejercicio 1: Crear un Documento Anidado
Instrucciones:
- Crea un documento en la colección
productos
con los siguientes campos:nombre
: "Laptop"precio
: 1200especificaciones
: un documento anidado con los camposprocesador
,ram
yalmacenamiento
.
Solución:
const nuevoProducto = { nombre: "Laptop", precio: 1200, especificaciones: { procesador: "Intel i7", ram: "16GB", almacenamiento: "512GB SSD" } }; await collection.insertOne(nuevoProducto);
Ejercicio 2: Leer un Documento Anidado
Instrucciones:
- Lee el documento de la colección
productos
donde el camponombre
es "Laptop" y muestra lasespecificaciones
.
Solución:
const producto = await collection.findOne({ "nombre": "Laptop" }); console.log(producto.especificaciones);
Ejercicio 3: Actualizar un Documento Anidado
Instrucciones:
- Actualiza el campo
ram
del documento anidadoespecificaciones
para el producto "Laptop" a "32GB".
Solución:
const filtro = { "nombre": "Laptop" }; const actualización = { $set: { "especificaciones.ram": "32GB" } }; await collection.updateOne(filtro, actualización);
Ejercicio 4: Eliminar un Campo Anidado
Instrucciones:
- Elimina el campo
almacenamiento
del documento anidadoespecificaciones
para el producto "Laptop".
Solución:
const filtro = { "nombre": "Laptop" }; const eliminación = { $unset: { "especificaciones.almacenamiento": "" } }; await collection.updateOne(filtro, eliminación);
Conclusión
En esta sección, hemos aprendido sobre los documentos anidados en MongoDB, cómo crearlos, leerlos, actualizarlos y eliminarlos. Los documentos anidados permiten una estructura de datos más flexible y natural, lo que es una de las principales ventajas de MongoDB sobre las bases de datos relacionales. Con estos conocimientos, estás listo para manejar estructuras de datos más complejas en tus aplicaciones MongoDB. En la próxima sección, exploraremos las referencias en MongoDB y cómo utilizarlas para modelar relaciones entre documentos.
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