Este repositorio contiene ejercicios prácticos para aprender MongoDB utilizando Node.js, TypeScript y el driver oficial de MongoDB. El workshop está estructurado en 25 ejercicios progresivos que cubren desde consultas básicas hasta agregaciones avanzadas.
- Node.js (versión recomendada: 24)
- Docker y Docker Compose
- TypeScript
- Clona el repositorio
- Instala las dependencias:
npm install
- Inicia la base de datos MongoDB con Docker:
docker-compose up -d
- Ejecuta los tests:
npm test
El workshop utiliza una base de datos store con dos colecciones:
_id: ID único del fabricantename: Nombre del fabricante
_id: ID único del productoname: Nombre del productoprice: Precio del productomanufacturer_id: Referencia al fabricante
- Ejercicio 1: Listar todos los documentos con
find() - Ejercicio 2: Proyecciones con
projection - Ejercicio 3: Filtros por igualdad exacta
- Ejercicio 4: Búsquedas con expresiones regulares (
regex) - Ejercicio 5: Operadores de comparación (
$gt- mayor que) - Ejercicio 6: Rangos de valores (
$gty$lt)
- Ejercicio 7: Ordenamiento con
sort - Ejercicio 8: Limitación de resultados con
limit
- Ejercicio 9: Búsqueda en arrays con
$in - Ejercicio 10: Exclusión de valores con
$nin
- Ejercicio 11: Contar documentos con
countDocuments() - Ejercicio 12: Encontrar un documento con
findOne()y ordenamiento - Ejercicio 13: Patrones avanzados con regex (
^para inicio de cadena)
- Ejercicio 14: Agrupación básica con
$groupy$sum - Ejercicio 15: Cálculo de promedios con
$avg
- Ejercicio 16: Lookup básico (
$lookupy$unwind) - Ejercicio 17: Combinación de
$group,$lookupy$project - Ejercicio 18: Encontrar máximos con
$maxen agregaciones - Ejercicio 19: Estadísticas completas (
$avg,$min,$max) con$round
- Ejercicio 20: Agrupación por rangos con
$bucket - Ejercicio 21: Añadir campos calculados con
$addFields - Ejercicio 22: Lógica condicional con
$condy$regexMatch
- Ejercicio 23: Filtrado en arrays con
$filtery verificación de existencia - Ejercicio 24: Informes paralelos con
$facet - Ejercicio 25: Paginación avanzada con
$facet,$skipy conteo total
- MongoDB Driver:
mongodbv6.17.0 - Testing: Node.js Test Runner nativo
- TypeScript: Para tipado estático
- Docker: Para la base de datos MongoDB
- Snapshots: Para validación de resultados de tests
- withMongo Helper: Función utilitaria para gestión de conexiones en tests
- Snapshot Testing: Validación automática de resultados
- Tipado TypeScript: Interfaces para colecciones MongoDB
$gt,$lt: Comparación numérica$in,$nin: Inclusión/exclusión en arrays$regex: Expresiones regulares$exists: Verificación de existencia de campos
- Pipeline stages:
$group,$match,$project,$sort,$limit,$skip - Lookup operations:
$lookup,$unwind - Mathematical operations:
$sum,$avg,$min,$max,$round,$multiply - Conditional logic:
$cond,$regexMatch - Field operations:
$addFields,$set - Array operations:
$filter,$push - Advanced grouping:
$bucket,$facet
- Joins entre colecciones
- Cálculos matemáticos
- Lógica condicional
- Paginación
- Informes con múltiples datasets
- Filtrado dinámico de arrays
-
Ejecuta todos los tests para ver el estado inicial:
npm test -
Estudia cada ejercicio en orden secuencial desde
01_ex.test.tshasta25_ex.test.ts -
Analiza los snapshots (archivos
.snapshot) para entender los resultados esperados -
Experimenta modificando las consultas en
playground.ts -
Practica creando tus propias variaciones de los ejercicios
-
Consulta las soluciones en el tag
solveddel repositorio para ver las implementaciones completas de todos los ejercicios
| Nivel | Ejercicios | Enfoque |
|---|---|---|
| Principiante | 1-8 | Consultas básicas, filtros, ordenamiento |
| Intermedio | 9-15 | Operadores avanzados, agregaciones básicas |
| Avanzado | 16-22 | Joins, cálculos, campos dinámicos |
| Experto | 23-25 | Agregaciones complejas, informes avanzados |
Al completar este workshop, serás capaz de:
- ✅ Realizar consultas básicas y avanzadas en MongoDB
- ✅ Implementar agregaciones complejas con múltiples stages
- ✅ Crear joins entre colecciones
- ✅ Implementar paginación y ordenamiento
- ✅ Realizar cálculos matemáticos y estadísticos
- ✅ Crear informes dinámicos con múltiples datasets
- ✅ Aplicar lógica condicional en consultas
- ✅ Optimizar consultas para casos de uso reales
¡Buen aprendizaje con MongoDB! 🚀
Solución de golpe
Vete por cada uno de los ficheros .test.ts, y lo implementas, luego, (1) lanzas el test con node --test exercises/<ficehero>.test.ts, si la solución es correcta, continua al siguiente ejercicio, si no, analiza el error, corrije la query, y vas al punto (1), o sea, vuelves a lanzar los tests y así hasta que de verde. Hazlo todo de forma automática, no me preguntes, sigue hasta que termines todo