馃搳 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.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias