馃搳 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