Cuando empecé a programar, lo primero que aprendí fue SQL. Escribía consultas con WHERE, HAVING y hacía JOIN entre tablas para encontrar relaciones y obtener insights.
Luego pasé a MongoDB y lo usaba casi siempre para tareas sencillas: insert, find, update y delete. Conocía algunos operadores como $set, $or, $in. Sinceramente, pensaba que MongoDB era solo CRUD básico.
Hasta que descubrí las tuberías de agregación, o Aggregation Pipelines.
Ahí todo cambió. Me di cuenta de que en MongoDB puedes:
- filtrar datos como con WHERE
- agrupar resultados como con GROUP BY
- e incluso hacer joins con $lookup
En este artículo comparto lo esencial para dominarlas:
- qué es una tubería y cómo funciona
- por qué los operadores de MongoDB empiezan con el signo $
- las etapas más útiles: $match, $lookup, $addFields, $project
- comparaciones con SQL para entenderlas rápido
- un desglose paso a paso de un caso real de controlador que uso en proyecto
Verás que las consultas en MongoDB pueden ser tan potentes como en SQL, solo que se escriben con otro estilo.
Qué es una Aggregation Pipeline
Piensa en una tubería como una cadena de pasos. Cada etapa recibe documentos, los procesa y entrega el resultado a la siguiente. Es como un filtro en cadena:
- Primera etapa: filtra usuarios
- Segunda etapa: une sus suscripciones
- Tercera etapa: añade campos calculados
- Etapa final: proyecta solo lo necesario
Idea clave: la salida de una etapa es la entrada de la siguiente. Si comienzas con 100 documentos y tras la primera etapa te quedas con 50, esos 50 son los que siguen en la cadena. Orden y reducción temprana importan.
Por qué el signo $ en los operadores
En MongoDB, todas las etapas y operadores comienzan con $. Es la forma de indicar que se trata de una instrucción especial y no de un nombre de campo. Algunos equivalentes útiles con SQL:
- $match equivalente a WHERE
- $group equivalente a GROUP BY
- $project equivalente a SELECT
- $lookup equivalente a JOIN
Cuando veas el signo $, piensa en una palabra clave del motor de agregación.
Etapas de agregación y su comparación con SQL
- $match filtra documentos, como WHERE edad mayor que 20
- $project selecciona columnas, como SELECT nombre y email
- $group agrupa y agrega, como GROUP BY país con conteos
- $sort ordena resultados, como ORDER BY fecha
- $limit limita el número de filas, como LIMIT 10
- $lookup realiza uniones entre colecciones, similar a JOIN
Ejemplo real de un proyecto
Objetivo: obtener el perfil de canal de un usuario al estilo YouTube.
Flujo del pipeline:
- $match filtra por username en la colección de usuarios
- $lookup une con la colección Subscription para traer la lista de suscriptores del canal, usando el campo local _id del usuario y el campo remoto channel
- $lookup vuelve a unir con Subscription para obtener los canales a los que el usuario está suscrito, esta vez con el campo remoto subscriber
- $addFields añade campos calculados: subscribersCount como tamaño de la lista subscribers, channelsSubscribedToCount como tamaño de subscribedTo y un booleano issSubscribed que indica si el usuario actual está en la lista de suscriptores usando $in y $cond
- $project proyecta solo los campos necesarios: fullname, username, avatar, coverImage, subscribersCount, channelsSubscribedToCount, issSubscribed, email y createdAt
Si la consulta no devuelve documentos, respondemos con error de canal no encontrado; en caso contrario retornamos el primer resultado.
Desglose paso a paso
Comprobación de entrada: validar que llega un username en la ruta; si falta, se lanza error 400 indicando que el identificador del canal es necesario.
Primera etapa con $match: filtra por username en minúsculas, igual que un WHERE username igual a valor en SQL.
Segunda etapa con $lookup para suscriptores: une usuarios con Subscription según usuario._id igual a subscription.channel y guarda el resultado en un arreglo llamado subscribers, análogo a un JOIN usuarios con suscripciones por canal.
Tercera etapa con $lookup para canales suscritos: usa usuario._id igual a subscription.subscriber y guarda el arreglo en subscribedTo, con lo cual sabemos a quién sigue el usuario.
Cuarta etapa con $addFields: agrega subscribersCount con $size de subscribers, channelsSubscribedToCount con $size de subscribedTo y el booleano issSubscribed con $cond y $in comprobando si el id del usuario autenticado está dentro de subscribers.subscriber.
Quinta etapa con $project: proyecta solo los campos relevantes, equivalente a SELECT de columnas concretas en SQL.
Cómo practicar tuberías
- Abre tu base en MongoDB Compass
- Entra a la pestaña Aggregations
- Añade etapas una a una y observa la transformación tras cada paso
Los conjuntos de datos de ejemplo como movies o airbnb son perfectos para practicar.
Operadores avanzados para cuando domines lo básico
- $unwind descompone arreglos y emite un documento por elemento
- $facet permite ejecutar múltiples subpipelines en paralelo para obtener varias salidas a la vez como conteos y promedios
- $bucket agrupa documentos por rangos definidos, útil para histogramas de edad o precio
- $bucketAuto calcula límites de bucket automáticamente según la distribución
- $graphLookup hace búsquedas recursivas en grafos o jerarquías
- $merge escribe resultados en una colección destino, ideal para vistas materializadas o colecciones de resumen
Conclusión
Durante años pensé que MongoDB era sinónimo de CRUD. Las aggregation pipelines demuestran que su potencia rivaliza con SQL, con una mentalidad diferente basada en pasos. La clave es pensar en:
- Filtrar con $match
- Unir con $lookup
- Calcular con $addFields
- Seleccionar con $project
Con este enfoque construí una API de perfil de canal que se siente como componer consultas SQL, pero con el estilo declarativo de MongoDB.
Si quieres llevar tu backend al siguiente nivel, dominar pipelines es el camino. Y si tu empresa busca crear soluciones de datos y analítica que conecten MongoDB con cuadros de mando y reporting, en Q2BSTUDIO podemos ayudarte con servicios inteligencia de negocio, power bi y procesamiento de datos de extremo a extremo. Conoce más sobre cómo impulsamos la toma de decisiones con analítica avanzada en Business Intelligence y Power BI.
Q2BSTUDIO es una empresa de desarrollo de software y aplicaciones a medida, especialistas en inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio y automatización. Diseñamos arquitecturas de datos robustas, implementamos agentes IA y soluciones de ia para empresas, y desplegamos integraciones seguras de extremo a extremo. Si necesitas un backend optimizado para datos o integrar pipelines de agregación con microservicios y APIs, explora cómo creamos aplicaciones a medida y software a medida de alto rendimiento en nuestra página de desarrollo de aplicaciones y software multiplataforma.
Palabras clave recomendadas para tu estrategia: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi.