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

  1. Pipeline de Agregación: Una secuencia de etapas que procesan los documentos de una colección.
  2. Etapas de Agregación: Cada etapa en el pipeline realiza una operación específica en los documentos.
  3. 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.

db.collection.aggregate([
  { $match: { status: "A" } }
])

$group

Agrupa documentos por un campo especificado y puede realizar operaciones de agregación como sumas y promedios.

db.collection.aggregate([
  { $group: { _id: "$status", total: { $sum: "$amount" } } }
])

$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.

db.collection.aggregate([
  { $sort: { total: -1 } }
])

$limit

Restringe el número de documentos que pasan a la siguiente etapa.

db.collection.aggregate([
  { $limit: 5 }
])

$skip

Omite un número específico de documentos.

db.collection.aggregate([
  { $skip: 10 }
])

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

  1. $match: Filtra los documentos donde status es "A".
  2. $group: Agrupa los documentos por el campo item y calcula el total de ventas (totalSales) multiplicando quantity por price.
  3. $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

  1. $group: Agrupa los documentos por region y calcula el totalRevenue multiplicando quantity por price.
  2. $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.

© Copyright 2024. Todos los derechos reservados