📊 Agregaciones (Aggregations)

Agregaciones en MongoDB

📊 Agregaciones (Aggregations)

Las agregaciones en MongoDB permiten procesar grandes volúmenes de datos para obtener estadísticas, resúmenes, transformaciones y reportes avanzados. Son equivalentes a las funciones GROUP BY, SUM, COUNT, AVG o JOIN de SQL, pero con mucha más flexibilidad.

MongoDB utiliza un sistema llamado pipeline (tubería), donde cada etapa transforma los documentos antes de enviarlos a la siguiente.


🔧 1️⃣ ¿Cómo funciona un pipeline?

Un pipeline es una secuencia de fases como:

  • $match → Filtrar documentos (como WHERE).
  • $group → Agrupar y calcular estadísticas.
  • $project → Seleccionar o transformar campos.
  • $sort → Ordenar documentos.
  • $limit → Limitar cantidad de resultados.
  • $lookup → "JOIN" con otra colección.
db.productos.aggregate([
  { $match: { categoria: "gaming" } },
  { $group: { _id: "$marca", total: { $sum: 1 } } }
]);

🔍 2️⃣ $match – Filtrar documentos

db.productos.aggregate([
  { $match: { precio: { $gt: 50 } } }
]);

Funciona igual que una consulta normal, pero dentro del pipeline.


🧮 3️⃣ $group – Agrupar y calcular estadísticas

db.productos.aggregate([
  {
    $group: {
      _id: "$categoria",
      totalProductos: { $sum: 1 },
      precioPromedio: { $avg: "$precio" },
      maxPrecio: { $max: "$precio" },
      minPrecio: { $min: "$precio" }
    }
  }
]);

_id define el criterio de agrupación.


🎯 4️⃣ $project – Seleccionar y transformar campos

db.productos.aggregate([
  {
    $project: {
      nombre: 1,
      precioConIVA: { $multiply: ["$precio", 1.21] },
      tieneStock: { $gt: ["$stock", 0] }
    }
  }
]);

Se usa para mostrar campos específicos o crear campos calculados.


📑 5️⃣ $sort – Ordenar resultados

db.productos.aggregate([
  { $sort: { precio: -1 } }  // -1 = descendente
]);

📉 6️⃣ $limit – Limitar cantidad de resultados

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

🔗 7️⃣ $lookup – "JOIN" entre colecciones

Permite unir dos colecciones, similar a SQL.

db.pedidos.aggregate([
  {
    $lookup: {
      from: "clientes",
      localField: "idCliente",
      foreignField: "_id",
      as: "clienteInfo"
    }
  }
]);

🧰 8️⃣ Ejemplo completo de pipeline

db.productos.aggregate([
  { $match: { categoria: "gaming" } },
  { $group: { _id: "$marca", total: { $sum: 1 }, promedioPrecio: { $avg: "$precio" } } },
  { $sort: { promedioPrecio: -1 } },
  { $limit: 3 }
]);

Este pipeline devuelve las 3 marcas de productos gaming con mayor precio promedio.


🧭 9️⃣ Resumen rápido

  • $match: Filtrar datos.
  • $group: Calcular estadísticas.
  • $project: Transformar campos.
  • $sort: Ordenar.
  • $limit: Limitar resultados.
  • $lookup: Unir colecciones.

Las agregaciones son fundamentales para reportes, dashboards y análisis de datos.


Publicar un comentario

0 Comentarios