Operaciones esenciales con MongoDB
En este módulo aprenderás los conceptos fundamentales de MongoDB que aparecen en los exámenes y pruebas prácticas. Cada sección está diseñada para que comprendas tanto la sintaxis como la…

Si se desea obtener solo los campos `nombre` y `autor` de todos los libros, ¿qué proyección es correcta?
¿Qué consulta devuelve los libros cuyo nombre comienza con la letra "L"?
¿Cuál es la diferencia principal entre `updateOne` y `replaceOne`?
¿Qué operador lógico se usaría para obtener libros con capítulos entre 15 y 20 inclusive?
Al ejecutar `db.libros.aggregate({ $group: { _id: "", "suma" : { $sum: "$capitulos" } } })`, ¿qué representa el campo `_id`?
Si se desea eliminar todos los libros cuyo número de capítulos sea exactamente 10, ¿qué comando es el adecuado?
¿Qué resultado produce `db.libros.find({nombre: /a$/})`?
¿Cuál es la consecuencia de crear una base de datos con `use Ejemplo1` sin crear ninguna colección?
Para cambiar el autor de los libros con códigos 2, 5 y 8 a "Marta Donoso", ¿qué filtro se emplea?
Operaciones esenciales con MongoDB: Guía completa
En este módulo aprenderás los conceptos fundamentales de MongoDB que aparecen en los exámenes y pruebas prácticas. Cada sección está diseñada para que comprendas tanto la sintaxis como la lógica detrás de los comandos más usados en la gestión de bases de datos NoSQL.
1. Paginación con skip() y limit()
Una de las tareas más comunes al trabajar con colecciones es paginación: mostrar un subconjunto de documentos y permitir al usuario navegar entre páginas.
- skip(N): omite los primeros
Ndocumentos del cursor. - limit(M): restringe la salida a
Mdocumentos.
Ejemplo práctico:
db.libros.find().skip(3).limit(3)
Este comando omite los tres primeros documentos y luego muestra los siguientes tres (documentos 4, 5 y 6). Es la forma típica de obtener la segunda página de resultados cuando cada página contiene tres registros.
2. Proyección de campos: obtener solo lo necesario
En MongoDB, la proyección permite seleccionar qué campos incluir o excluir en el resultado de una consulta. Esto reduce el ancho de banda y mejora el rendimiento.
Para obtener únicamente los campos nombre y autor de todos los libros, la sintaxis correcta es:
db.libros.find({}, {_id:0, nombre:1, autor:1})
Explicación:
- El primer objeto
{}indica que no hay filtro (se seleccionan todos los documentos). - El segundo objeto define la proyección:
_id:0excluye el identificador automático, mientras quenombre:1yautor:1incluyen esos campos.
Nota: usar {nombre:1, autor:1} sin excluir _id incluiría también el campo _id por defecto.
3. Búsquedas con expresiones regulares
MongoDB soporta expresiones regulares (regex) para filtrar textos de forma flexible. Veamos dos casos típicos:
3.1. Nombres que empiezan con "L"
db.libros.find({nombre: /^L/})
El patrón /^L/ indica que la cadena debe comenzar con la letra mayúscula L. El símbolo ^ representa el inicio de la cadena.
3.2. Nombres que terminan con "a"
db.libros.find({nombre: /a$/})
Aquí /a$/ busca los documentos cuyo campo nombre termina con la letra a. El símbolo $ marca el final de la cadena.
4. Actualizaciones: updateOne vs replaceOne
MongoDB ofrece dos formas principales de modificar documentos:
- updateOne: modifica solo los campos especificados dentro del documento encontrado. Se utilizan operadores como
$set,$inc, etc. - replaceOne: sustituye todo el documento por uno nuevo, manteniendo el mismo
_id. No se pueden usar operadores de actualización; se envía un documento completo.
Ejemplo de updateOne:
db.libros.updateOne({codigo: 101}, {$set: {autor: "Nuevo Autor"}})
Ejemplo de replaceOne:
db.libros.replaceOne({codigo: 101}, {codigo:101, nombre:"Nuevo Libro", autor:"Nuevo Autor", capitulos:12})
La diferencia clave es que updateOne altera campos puntuales, mientras que replaceOne reemplaza el documento entero.
5. Operadores lógicos para rangos numéricos
Para filtrar documentos dentro de un rango, se combina $gte (greater than or equal) y $lte (less than or equal) dentro de un operador $and:
db.libros.find({
$and: [
{capitulos: {$gte: 15}},
{capitulos: {$lte: 20}}
]
})
Esta consulta devuelve todos los libros cuyo número de capítulos está entre 15 y 20, inclusive. Aunque MongoDB permite combinar los comparadores en un solo objeto ({capitulos: {$gte:15, $lte:20}}), usar $and refuerza la comprensión del concepto lógico.
6. Agrupación con aggregate y el significado de _id
La etapa $group permite resumir datos. El campo _id define la clave de agrupación.
db.libros.aggregate({
$group: {
_id: "",
suma: {$sum: "$capitulos"}
}
})
En este caso, _id: "" es un identificador vacío que agrupa todos los documentos en un único grupo. El resultado mostrará la suma total de capítulos de toda la colección.
7. Eliminación de documentos
Para borrar varios documentos que cumplan una condición, se utiliza deleteMany. Si queremos eliminar todos los libros con exactamente 10 capítulos:
db.libros.deleteMany({capitulos: 10})
Este comando elimina cada documento cuyo campo capitulos sea igual a 10. deleteOne eliminaría solo el primer documento encontrado, mientras que remove es una forma obsoleta que aún funciona pero no se recomienda en versiones actuales.
8. Buenas prácticas y optimización SEO para consultas MongoDB
Al diseñar aplicaciones que usan MongoDB, ten en cuenta los siguientes consejos para mejorar el rendimiento y la visibilidad de tu contenido (cuando lo publiques en blogs o documentación):
- Indexa los campos de filtro (por ejemplo,
nombreocapitulos) para que las búsquedas confindyaggregatesean más rápidas. - Usa
projectionpara devolver solo los campos necesarios, reduciendo el tamaño de la respuesta. - Prefiere
skip/limiten combinación consortpara paginar de forma consistente. - Evita expresiones regulares sin ancla (
/texto/) en colecciones grandes; siempre que sea posible, agrega^o$para limitar el escaneo. - Documenta cada operación con comentarios claros y usa nombres de variables descriptivos; esto ayuda a que los motores de búsqueda indexen mejor tu contenido técnico.
9. Resumen de conceptos clave
- skip + limit: paginación básica, omite N documentos y muestra M.
- Proyección:
{_id:0, campo1:1, campo2:1}para seleccionar campos específicos. - Regex:
/^L/inicio,/a$/fin. - updateOne vs replaceOne: actualización parcial vs sustitución total.
- Operadores lógicos:
$andcon$gtey$ltepara rangos. - Aggregate $group:
_idvacío agrupa todo en un solo conjunto. - deleteMany: elimina todos los documentos que cumplen la condición.
10. Preguntas de práctica
Para consolidar lo aprendido, intenta responder sin consultar la solución:
- ¿Qué comando usarías para obtener los documentos 10 al 15 de la colección
libros? - Si necesitas excluir el campo
_idyfechaPublicacionen una proyección, ¿cómo lo escribirías? - Escribe una expresión regular que encuentre libros cuyo nombre contenga la palabra "Historia" en cualquier posición.
- ¿Cuál es la diferencia entre
updateOnecon$setyreplaceOnecuando el documento original tiene campos adicionales no especificados? - Construye una consulta que devuelva libros con capítulos entre 5 y 8 inclusive, usando solo un objeto de filtro.
Revisa tus respuestas comparándolas con la documentación oficial de MongoDB (MongoDB Manual) para reforzar el aprendizaje.
