Definição
Retorna a soma coletiva de valores numéricos em um grupo de documentos.
O acumulador $sum está disponível nos seguintes estágios:
Observação
Outros usos de $sum
Esta página descreve $sum quando usado como acumulador. Os 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 de valores numéricos em uma 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 mistos, $sum promove o tipo de entrada menor para o maior dos dois. Um tipo é considerado maior quando representa uma faixa de valores mais ampla. A ordem dos tipos numéricos do menor para o maior é: inteiro → longo → duplo → 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ê utiliza $sum em um campo que contém valores numéricos e não numéricos, $sum ignora os valores não numéricos e retorna a soma dos valores numéricos.
Quando você usa $sum em um campo que não existe em nenhum documento da collection, $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 esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações 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:
Usa
$matchpara filtrar filmes com um valorrateddeG,PG,PG-13ouRe uma contagem inteira de votos IMDb.Utiliza
$grouppara agrupar filmes pelo camporatede calculatotalVotesutilizando$sumemimdb.votes.Utiliza
$sortpara retornar resultados em ordem alfabética por classificação de conteúdo.