Cuando necesitas ir más allá de consultas simples en MongoDB, el Aggregation Framework se convierte en tu mejor aliado. Este mecanismo permite encadenar múltiples operaciones sobre los datos, transformándolos etapa por etapa hasta obtener resultados complejos y precisos. A continuación se explica cómo funciona, qué etapas usar y en qué orden aplicarlas para sacar el máximo provecho.
¿Qué son los pipelines de agregación en MongoDB?
El Aggregation Framework trabaja con el concepto de pipelines [00:18]. Imagina una tubería con llaves que abren y cierran el paso del agua: cada llave representa una etapa (stage) del pipeline. Los datos fluyen de una etapa a la siguiente, y la salida de una etapa se convierte en la entrada de la siguiente. Esto permite filtrar, agrupar, transformar y ordenar documentos de forma secuencial.
Para comenzar a trabajar con pipelines en Compass, basta con abrir una nueva pestaña y seleccionar la vista de Aggregations [01:00]. Allí aparece un resumen de documentos de ejemplo y un área de trabajo donde se van añadiendo etapas.
¿Por qué la primera etapa debe ser match?
Siempre se recomienda que la primera etapa sea $match [01:22]. Esta etapa filtra documentos exactamente igual que el método find. La razón es simple: si reduces la cantidad de documentos desde el inicio, todas las operaciones posteriores procesan menos datos y el rendimiento mejora considerablemente.
- Las herramientas NoSQL están diseñadas para ofrecer mejor performance en distintos casos de uso [01:42].
- Al pegar una consulta en $match, los resultados aparecen automáticamente en el panel derecho [02:06].
- Cada cambio que realices se refleja de inmediato sin necesidad de ejecutar manualmente.
¿Cómo se añaden etapas adicionales al pipeline?
Una vez definido el filtro inicial, puedes agregar más etapas. Todos los operadores disponibles llevan el prefijo del signo $ [02:34]. Por ejemplo, con $project seleccionas únicamente los campos que te interesan, como title o release [02:40]. Las etapas se pueden reordenar arrastrándolas, lo que resulta muy útil porque siempre debes recordar que el orden importa: la salida alimenta la siguiente entrada [03:06].
¿Cómo funciona la etapa group para agrupar datos?
La etapa $group funciona de manera similar al GROUP BY de SQL [03:17]. Permite agrupar documentos por un campo específico y aplicar operaciones sobre cada grupo.
- Para agrupar por año se utiliza la sintaxis
"$year", donde el signo $ convierte el nombre del campo en una variable que referencia la salida de la etapa anterior [03:30].
- El operador $avg es un acumulador que calcula promedios [04:08]. En el ejemplo, se usa sobre el campo
"$runtime" para obtener la duración promedio de películas por año [04:22].
- El resultado muestra el identificador del año y el promedio de duración, pero solo de los documentos que pasaron el filtro de $match [04:40].
¿Cómo ordenar resultados y exportar el pipeline?
Después de agrupar, puedes añadir $sort para ordenar los resultados [05:12]. Un detalle importante: el campo average no existía en el documento original, es un campo calculado creado durante la agregación [05:20]. Al asignarle el valor -1, los resultados se ordenan de mayor a menor duración promedio.
- Compass permite exportar el pipeline a distintos lenguajes de programación, adaptando la sintaxis automáticamente [05:38].
- La vista text unifica todas las etapas en un solo bloque editable, facilitando la modificación rápida [05:52].
- En la parte superior se muestra el flujo completo: $match → $group → $sort [06:06].
- También se puede generar consultas con ayuda de inteligencia artificial integrada en la herramienta [06:16].
Un aspecto interesante es la posibilidad de hacer $lookup, que es el equivalente a un JOIN en SQL [06:30]. Aunque las referencias entre colecciones en bases de datos de documentos no son tan estrictas como en bases relacionales, sí existen. En la base de datos de ejemplo, la colección Comments contiene un identificador de película que permite vincular comentarios con sus películas correspondientes [06:46].
¿Ya intentaste crear tu propio pipeline con $lookup para unir películas y comentarios? Comparte tu experiencia y cómo resolviste el reto.