6

MongoDB Aggregation: guía con ejemplos y ejercicios

188Puntos

hace un año

MongoDB es una base de datos muy famosa y ampliamente utilizada en el mundo de la tecnología, pues cuenta con diversas funciones que facilitan la vida de los desarrolladores y analistas cuando trabajan con grandes cantidades de datos.

Entre todas estas cosas, la agregación es una de las características que sobresale. Así que vamos a adentrarnos en qué es exactamente la Agregación de MongoDB, cómo funciona con ejemplos y cómo nos ayuda a procesar datos de manera efectiva.

¿Cómo funciona MongoDB aggregation?

La agregación de MongoDB es una forma de trabajar con datos que te permite realizar operaciones con numerosos documentos en una colección.

A diferencia de las consultas de búsqueda regulares, que devuelven documentos individuales, estas permite hacer cálculos y transformaciones avanzadas en la información de la base de datos.

Principales Conceptos de la Agregación

Exploremos algunos conceptos clave antes de ponerlo en práctica.

1. Pipeline

Este uso de funciones se basa en el concepto de pipeline, que consiste en una serie de etapas que se ejecutan secuencialmente para procesar los datos. Cada etapa toma los datos de entrada, ejecuta una operación específica y transfiere los resultados a la siguiente etapa del pipeline.

2. Etapas de Agregación

MongoDB ofrece una amplia gama de etapas de agregación que se pueden combinar en un pipeline para lograr los resultados deseados y algunas de estas incluyen:

  • $group: Agrupa los documentos según un criterio específico y calcula agregaciones sobre los grupos resultantes.
  • $project: Permite seleccionar campos específicos de los documentos y remodelar la estructura de salida.
  • $sort: Ordena los documentos en función de uno o más campos.
  • $match: Filtra los documentos que cumplen ciertas condiciones.
  • $limit: Limita la cantidad de documentos de salida.
  • $skip: Omite una cantidad específica de documentos de salida.
  • $unwind: Deconstruye un campo de matriz en múltiples documentos, generando una copia de cada documento por cada elemento en el campo de matriz.
  • $lookup: Ejecuta una operación de unión entre colecciones para combinar datos relacionados.

Practica las etapas de agregación con una base de datos de AirBNB en el Curso de MongoDB Aggregation Framework.

3. Operadores de Agregación o aggregation operations

Además de las etapas de agregación, MongoDB proporciona distintos operadores que se pueden utilizar dentro de estas etapas para efectuar cálculos y transformaciones más avanzadas.

  • $sum: Calcula la suma de los valores de un campo específico.
  • $avg: Calcula el promedio de los valores de un campo específico.
  • $max: Encuentra el valor máximo de un campo específico.
  • $min: Encuentra el valor mínimo de un campo específico.
  • $push: Agrega valores a un campo de matriz existente.
  • $addToSet: Agrega valores a un campo de matriz existente evitando duplicados.

Ejemplos de uso de MongoDB aggregation pipelines

A continuación, vamos a explorar algunos ejemplos prácticos para comprender cómo se emplea la agregación de MongoDB.

1. Group

El operador $group permite agrupar los documentos por un campo específico y realizar operaciones de agregación en los grupos resultantes.

Por ejemplo, supongamos que tenemos una colección de documentos que representan ventas y queremos calcular la suma total de las ventas por categoría de producto:

db.sales.aggregate([
{ $group: { _id: "$category", totalSales: { $sum: "$amount" } } }
])

Este ejemplo agrupa los documentos por el campo “category” y calcula la suma total de las ventas de cada categoría en el campo “totalSales”.

2. Project

En cambio, el operador $project permite seleccionar campos específicos de los documentos y remodelar la estructura de salida.

Por ejemplo, si queremos obtener solo los campos “name” y “price” de una colección de productos que tiene diversos campos, podemos utilizar el operador $project de la siguiente manera:

db.products.aggregate([ { $project: { name: 1, price: 1 } } ])

Este ejemplo selecciona solo los campos “name” y “price” de cada documento y muestra solo esos campos en la salida.

3. Match

$match es otro operador que se utiliza para filtrar los documentos que cumplen ciertas condiciones. Por ejemplo, si queremos obtener solo los documentos de ventas donde el campo “amount” sea mayor que 100, podemos utilizar el operador $match de la siguiente manera:

db.sales.aggregate([ { $match: { amount: { $gt: 100 } } } ])

Este ejemplo devuelve solo los documentos de ventas donde el campo “amount” es mayor que 100.

4. Sort

El operador $sort se utiliza para ordenar los documentos en función de uno o más campos. Por ejemplo, si queremos ordenar los documentos de una colección de productos por el campo “price” de forma descendente, podemos utilizar el operador $sort de la siguiente manera:

db.products.aggregate([ { $sort: { price: -1 } } ])

Este ejemplo ordena los documentos por el campo “price” de forma descendente.

5. Limit

El operador $limit se usa para limitar la cantidad de documentos de salida. Por ejemplo, si queremos obtener solo los primeros 10 documentos de una colección, podemos utilizar el operador $limit de la siguiente manera:

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

Este ejemplo devuelve solo los primeros 10 documentos de la colección.

6. Skip

El operador $skip se emplea para omitir una cantidad específica de documentos de salida. Por ejemplo, si queremos obtener los documentos de una colección después de omitir los primeros 5, podemos utilizar el operador $skip de la siguiente manera:

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

Este ejemplo devuelve los documentos de la colección después de omitir los primeros 5.

7. Unwind

El operador $unwind se utiliza para desconstruir un campo de matriz en múltiples documentos.

Por ejemplo, si tenemos una colección de documentos que representan órdenes con un campo “products” que es una matriz de productos, y queremos obtener un documento por cada producto en cada orden, podemos utilizar el operador $unwind de la siguiente manera:

db.orders.aggregate([ { $unwind: "$products" } ])

Este ejemplo genera una copia de cada documento por cada producto en el campo “products”.

8. Lookup

El operador $lookup se usa para realizar una operación de unión entre colecciones y combinar datos relacionados.

Por ejemplo, si tenemos una colección de documentos que representan órdenes y una colección de documentos que representan clientes, y queremos agregar los datos de cliente correspondientes a cada orden, podemos utilizar el operador $lookup de la siguiente manera:

db.orders.aggregate([ { $lookup: { from: "customers", localField: "customerId", foreignField: "_id", as: "customerData" } } ])

Este ejemplo combina los datos de la colección “customers” basado en el campo “customerId” de cada orden y agrega los datos de cliente correspondientes en el campo “customerData”.

Aprende más sobre MongoDB

En resumen, la agregación de MongoDB es una herramienta útil para trabajar con datos en bases de datos NoSQL. Con ella, puedes hacer cálculos complejos y transformaciones avanzadas en montañas de datos. Por eso, los desarrolladores y analistas la adoran.

Si entiendes cómo funciona el “pipeline”, las diferentes etapas de la agregación y los trucos que te ofrece, podrás aprovecharla al máximo y hacer tus operaciones de datos de manera mucho más eficiente. Te invito a tomar el Curso de MongoDB Aggregation Framework donde usamos la base de datos de prueba de AirBNB para hacer consultas y crear todo el pipeline de agregación.

Carlos
Carlos
Escribe tu comentario
+ 2