Definición
Devuelve la suma total de valores numéricos en un grupo de documentos.
El acumulador $sum está disponible en estas etapas:
Nota
Otros usos de $sum
Esta página describe $sum cuando se utiliza como acumulador. Los acumuladores devuelven un valor agregado como la suma, el máximo o el mínimo en un grupo de documentos de entrada.
También puede usar $sum en estos otros contextos:
$sum (expression), que devuelve la suma de valores numéricos en un arreglo.$sum (window function), que se utiliza en la etapa$setWindowFieldspara calcular la suma acumulada de valores en una ventana.
Sintaxis
{ $sum: <expression> }
Comportamiento
Tipo de resultado
Cuando se mezclan los tipos de entrada, $sum promueve el tipo de entrada menor al mayor de los dos. Un tipo se considera mayor cuando representa un rango más amplio de valores. El orden de los tipos numéricos, de menor a mayor, es: entero → largo → double → decimal.
El tipo de entrada mayor también determina el tipo de resultado, a menos que la operación se desborde y salga del rango representado por ese tipo de dato mayor. En casos de desbordamiento, $sum promueve el resultado según el siguiente orden:
Campos no numéricos o no existentes
Cuando se utiliza $sum en un campo que contiene tanto valores numéricos como no numéricos, $sum ignora los valores no numéricos y devuelve la suma de los valores numéricos.
Cuando utiliza $sum en un campo que no existe en ningún documento de la colección, $sum devuelve 0 para ese campo.
Ejemplo
Los ejemplos de esta página utilizan datos del conjunto de datos sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si realizó alguna modificación en las bases de datos de muestra, es posible que deba descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.
El siguiente ejemplo agrupa películas por clasificación de contenido y devuelve el número total de votos de IMDb para cada grupo.
db.movies.aggregate( [ { $match: { rated: { $in: [ "G", "PG", "PG-13", "R" ] }, "imdb.votes": { $type: "int" } } }, { $group: { _id: "$rated", totalVotes: { $sum: "$imdb.votes" } } }, { $sort: { _id: 1 } } ] )
El pipeline anterior:
Utiliza
$matchpara filtrar películas con un valorrateddeG,PG,PG-13oRy un recuento de votos de IMDb entero.Utiliza
$grouppara agrupar películas por el camporatedy calculatotalVotesutilizando$sumenimdb.votes.Utiliza
$sortpara devolver resultados en orden alfabético por clasificación de contenido.