El marco de agregación de MongoDB es una poderosa herramienta que permite realizar operaciones de procesamiento de datos y transformación en colecciones de documentos. A través de una serie de etapas, puedes filtrar, agrupar, ordenar y modificar datos de manera eficiente. Este módulo te guiará a través de los conceptos básicos del marco de agregación, sus componentes y cómo utilizarlos en tus aplicaciones.
Conceptos Clave del Marco de Agregación
- Pipeline de Agregación: Una secuencia de etapas que procesan los documentos de una colección.
- Etapas de Agregación: Cada etapa en el pipeline realiza una operación específica en los documentos.
- Operadores de Agregación: Funciones que se utilizan dentro de las etapas para realizar operaciones específicas.
Principales Etapas de Agregación
$match
Filtra los documentos para que solo aquellos que cumplan con los criterios especificados pasen a la siguiente etapa.
$group
Agrupa documentos por un campo especificado y puede realizar operaciones de agregación como sumas y promedios.
$project
Selecciona los campos que se incluirán o excluirán en los documentos de salida.
db.collection.aggregate([ { $project: { item: 1, total: { $multiply: ["$price", "$quantity"] } } } ])
$sort
Ordena los documentos en el pipeline.
$limit
Restringe el número de documentos que pasan a la siguiente etapa.
$skip
Omite un número específico de documentos.
Ejemplo Práctico
Supongamos que tenemos una colección orders
con los siguientes documentos:
[ { "_id": 1, "item": "apple", "quantity": 5, "price": 10, "status": "A" }, { "_id": 2, "item": "banana", "quantity": 10, "price": 5, "status": "A" }, { "_id": 3, "item": "orange", "quantity": 8, "price": 8, "status": "B" }, { "_id": 4, "item": "mango", "quantity": 15, "price": 12, "status": "A" } ]
Queremos obtener el total de ventas por cada tipo de fruta, ordenado de mayor a menor. El pipeline de agregación sería:
db.orders.aggregate([ { $match: { status: "A" } }, { $group: { _id: "$item", totalSales: { $sum: { $multiply: ["$quantity", "$price"] } } } }, { $sort: { totalSales: -1 } } ])
Explicación del Pipeline
- $match: Filtra los documentos donde
status
es "A". - $group: Agrupa los documentos por el campo
item
y calcula el total de ventas (totalSales
) multiplicandoquantity
porprice
. - $sort: Ordena los resultados por
totalSales
en orden descendente.
Ejercicio Práctico
Ejercicio 1
Dada la colección sales
:
[ { "_id": 1, "product": "laptop", "quantity": 4, "price": 1000, "region": "North" }, { "_id": 2, "product": "phone", "quantity": 10, "price": 500, "region": "South" }, { "_id": 3, "product": "tablet", "quantity": 6, "price": 300, "region": "North" }, { "_id": 4, "product": "laptop", "quantity": 3, "price": 1000, "region": "South" } ]
Crea un pipeline de agregación que calcule el total de ingresos (totalRevenue
) por región y ordene los resultados de mayor a menor.
Solución
db.sales.aggregate([ { $group: { _id: "$region", totalRevenue: { $sum: { $multiply: ["$quantity", "$price"] } } } }, { $sort: { totalRevenue: -1 } } ])
Explicación
- $group: Agrupa los documentos por
region
y calcula eltotalRevenue
multiplicandoquantity
porprice
. - $sort: Ordena los resultados por
totalRevenue
en orden descendente.
Conclusión
El marco de agregación de MongoDB es una herramienta extremadamente versátil y poderosa para el procesamiento y análisis de datos. Al dominar las diferentes etapas y operadores de agregación, puedes realizar consultas complejas y obtener información valiosa de tus datos. En el siguiente módulo, exploraremos cómo utilizar pipelines de agregación más avanzados y combinarlos con otras características de MongoDB para optimizar tus consultas y análisis de datos.
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