En este tema, aprenderemos sobre el uso de pipelines en MongoDB, una característica poderosa del marco de agregación que permite procesar y transformar datos de manera eficiente. Los pipelines son secuencias de etapas que procesan documentos de una colección, permitiendo realizar operaciones complejas en los datos.
Conceptos Clave
- Pipeline: Una secuencia de etapas que procesan documentos.
- Etapa: Cada paso en el pipeline que realiza una operación específica.
- Operadores de Agregación: Funciones que se utilizan dentro de las etapas para transformar los datos.
Estructura de un Pipeline
Un pipeline en MongoDB se define como una lista de etapas, donde cada etapa es un documento que especifica una operación. La estructura básica es la siguiente:
Ejemplo Práctico
Supongamos que tenemos una colección orders
con documentos que representan pedidos de una tienda en línea. Cada documento tiene la siguiente estructura:
{ "_id": ObjectId("..."), "customerId": "12345", "items": [ { "productId": "A1", "quantity": 2, "price": 10 }, { "productId": "B2", "quantity": 1, "price": 20 } ], "total": 40, "date": ISODate("2023-10-01T00:00:00Z") }
Queremos calcular el total de ventas por cada cliente. Para ello, utilizaremos un pipeline con las siguientes etapas:
- Descomponer los elementos del pedido: Usamos
$unwind
para descomponer el arrayitems
. - Agrupar por cliente: Usamos
$group
para agrupar los documentos porcustomerId
y sumar los totales. - Proyectar el resultado: Usamos
$project
para formatear el resultado final.
Código del Pipeline
db.orders.aggregate([ { $unwind: "$items" }, { $group: { _id: "$customerId", totalSales: { $sum: { $multiply: ["$items.quantity", "$items.price"] } } } }, { $project: { _id: 0, customerId: "$_id", totalSales: 1 } } ])
Explicación del Código
-
$unwind: Descompone el array
items
en documentos individuales.{ $unwind: "$items" }
Esto convierte cada documento con un array
items
en múltiples documentos, uno por cada elemento del array. -
$group: Agrupa los documentos por
customerId
y calcula el total de ventas.{ $group: { _id: "$customerId", totalSales: { $sum: { $multiply: ["$items.quantity", "$items.price"] } } } }
Aquí,
_id
es el campo por el cual agrupamos (en este caso,customerId
).totalSales
es el campo calculado que suma el producto dequantity
yprice
para cada item. -
$project: Formatea el resultado final.
{ $project: { _id: 0, customerId: "$_id", totalSales: 1 } }
Esto proyecta los campos deseados en el resultado final, eliminando el campo
_id
y renombrandocustomerId
.
Ejercicio Práctico
Ejercicio
Dada una colección employees
con la siguiente estructura:
{ "_id": ObjectId("..."), "name": "John Doe", "department": "Sales", "salary": 50000, "joinDate": ISODate("2020-01-15T00:00:00Z") }
Crea un pipeline que calcule el salario promedio por departamento.
Solución
db.employees.aggregate([ { $group: { _id: "$department", averageSalary: { $avg: "$salary" } } }, { $project: { _id: 0, department: "$_id", averageSalary: 1 } } ])
Explicación de la Solución
-
$group: Agrupa los documentos por
department
y calcula el salario promedio.{ $group: { _id: "$department", averageSalary: { $avg: "$salary" } } }
Aquí,
_id
es el campo por el cual agrupamos (en este caso,department
).averageSalary
es el campo calculado que obtiene el promedio desalary
. -
$project: Formatea el resultado final.
{ $project: { _id: 0, department: "$_id", averageSalary: 1 } }
Esto proyecta los campos deseados en el resultado final, eliminando el campo
_id
y renombrandodepartment
.
Conclusión
En esta sección, hemos aprendido cómo usar pipelines en MongoDB para procesar y transformar datos de manera eficiente. Hemos visto cómo descomponer arrays, agrupar documentos y proyectar resultados. Los pipelines son una herramienta poderosa que permite realizar operaciones complejas en los datos de manera eficiente y flexible. En el siguiente módulo, exploraremos características avanzadas de MongoDB, como la replicación y la fragmentación.
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