Agrupar y acumular

Agrupa documentos por una clave y calcula totales o medias por grupo, o cuenta sus documentos.

Agrupa documentos por una clave con $group y calcula sobre cada grupo con los acumuladores de MongoDB.

Requisitos

  • Una conexión con un usuario que tenga read sobre la base.

Agrupar y sumar

JavaScript
db.pedidos.aggregate([
  { $match: { estado: "pagado" } },
  { $group: { _id: "$cliente", total: { $sum: "$total" }, pedidos: { $count: {} }, media: { $avg: "$total" } } },
  { $sort: { total: -1 } },
]);

Guardar el primero y el último

JavaScript
db.pedidos.aggregate([{ $sort: { creado: 1 } }, { $group: { _id: "$cliente", primero: { $first: "$creado" } } }]);

Comprobar

El resultado trae un documento por cliente con sus totales. Para los mismos datos sale siempre en el mismo orden.

Problemas frecuentes

  • Un $group con muchísimos grupos necesita más memoria; con allowDiskUse vuelca a disco y no falla.

Ver también