Definição
Retorna a soma agregada de valores numéricos em um grupo de documentos.
O acumulador $sum está disponível nestes estágios:
Observação
Outros usos de $sum
Esta página descreve $sum quando usado como um acumulador. Acumuladores retornam um valor agregado como soma, máximo ou mínimo em um grupo de documentos de entrada.
Você também pode usar $sum nestes outros contextos:
$sum (expression), que retorna a soma dos valores numéricos em um array.$sum (window function), que é usado no estágio$setWindowFieldspara calcular a soma cumulativa de valores em uma janela.
Sintaxe
{ $sum: <expression> }
Comportamento
Tipo de resultado
Quando os tipos de entrada são misturados, $sum promove o tipo de entrada menor para o maior dos dois. Um tipo é considerado maior quando representa uma faixa mais ampla de valores. A ordem dos tipos numéricos do menor para o maior é: inteiro → longo → double → decimal.
O maior dos tipos de entrada também determina o tipo de resultado, a menos que a operação se exceda e esteja além da faixa representada por esse tipo de dados maior. Em casos de excesso, $sum promove o resultado de acordo com a seguinte ordem:
Campos não numéricos ou não existentes
Quando você usa $sum em um campo que contém valores numéricos e não numéricos, $sum ignorará os valores não numéricos e retornará a soma dos valores numéricos.
Quando você usa $sum em um campo que não existe em nenhum documento da coleção, $sum retorna 0 para esse campo.
Exemplo
Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
O exemplo a seguir agrupa filmes por classificação de conteúdo e retorna o número total de votos do 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 } } ] )
O pipeline anterior: