Definição
Retorna a soma de valores numéricos em uma array.
Observação
Outros usos de $sum
Esta página descreve $sum quando usado como uma expressão, que retorna a soma de valores numéricos em uma array.
Você também pode usar $sum nestes outros contextos:
$sum (accumulator), que retorna a soma coletiva de valores numéricos em um grupo de documentos.$sum (window function), que é usado no estágio$setWindowFieldspara calcular a soma cumulativa de valores em uma janela.
Sintaxe
Quando usado como expressão, $sum tem uma de duas sintaxes:
{ $sum: <expression> }
Na sintaxe anterior, o operando é uma única expressão que avalia para uma matriz. $sum atravessa a array e retorna a soma dos valores numéricos da array.
{ $sum: [ <expression1>, <expression2>, ... ] }
Na sintaxe anterior, cada expressão é um único valor numérico. $sum retorna a soma desses valores.
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
Se utilizado 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.
Se todos os operandos não forem numéricos, $sum retornará 0.
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.
Este exemplo usa $sum no estágio $project para calcular o total de prêmios ganhos e nomeados para três filmes e armazenar o resultado em um novo campo chamado totalAwards.
db.movies.aggregate( [ { $match: { title: { $in: [ "The Godfather", "Inception", "The Dark Knight" ] } } }, { $project: { _id: 0, title: 1, totalAwards: { $sum: [ "$awards.wins", "$awards.nominations" ] } } }, { $sort: { totalAwards: -1 } } ] )
O pipeline anterior: