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
$unwindpara descomponer el arrayitems. - Agrupar por cliente: Usamos
$grouppara agrupar los documentos porcustomerIdy sumar los totales. - Proyectar el resultado: Usamos
$projectpara 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
itemsen documentos individuales.{ $unwind: "$items" }Esto convierte cada documento con un array
itemsen múltiples documentos, uno por cada elemento del array. -
$group: Agrupa los documentos por
customerIdy calcula el total de ventas.{ $group: { _id: "$customerId", totalSales: { $sum: { $multiply: ["$items.quantity", "$items.price"] } } } }Aquí,
_ides el campo por el cual agrupamos (en este caso,customerId).totalSaleses el campo calculado que suma el producto dequantityypricepara 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
_idy 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
departmenty calcula el salario promedio.{ $group: { _id: "$department", averageSalary: { $avg: "$salary" } } }Aquí,
_ides el campo por el cual agrupamos (en este caso,department).averageSalaryes 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
_idy 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
