Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Menu Docs

$sum (função de janela)

$sum

Retorna a soma de valores numéricos de documentos em uma janela específica.

Observação

Outros usos de $sum

Esta página descreve $sum quando usado como uma função de janela.

Você também pode usar $sum nestes outros contextos:

{
$setWindowFields: {
...
output: {
<field>: {
$sum: <expression>
}
}
}
}

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:

  • Se o tipo de entrada maior for integer, o tipo de resultado será promovido para long.

  • Se o tipo de entrada maior for long, o tipo de resultado será promovido para double.

  • Se o tipo maior for double ou decimal, o resultado de transbordamento será representado como infinito positivo ou negativo. Não há nenhum tipo de promoção do resultado.

Se alguns documentos na janela tiverem um valor null para o campo ou estiverem faltando o campo, $sum ignorará esses valores e somará os valores restantes.

Se todos os documentos na janela tiverem um valor null para o campo ou estiverem faltando o campo, $sum retornará 0.

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 $setWindowFields para calcular um total de votos cumulativos em execução para cada filme Universal de 2009 e 2010. Cada documento recebe o valor $sum calculado desde o início de sua partição anual até o documento atual.

db.movies.aggregate( [
{
$match: {
genres: "Musical",
year: { $in: [ 2009, 2010 ] },
"imdb.rating": { $type: "double" },
"imdb.votes": { $gt: 0 }
}
},
{
$setWindowFields: {
partitionBy: "$year",
sortBy: { title: 1 },
output: {
cumulativeVotesInYear: {
$sum: "$imdb.votes",
window: {
documents: [ "unbounded", "current" ]
}
},
rankInYear: {
$documentNumber: {}
}
}
}
},
{
$project: {
_id: 0,
title: 1,
year: 1,
"imdb.votes": 1,
cumulativeVotesInYear: 1,
rankInYear: 1
}
},
{ $sort: { year: 1, title: 1 } }
] )

O pipeline anterior:

  • Usa $match para filtrar filmes músicas de 2009 e 2010 com uma classificação numérica do IMDb e pelo menos um voto.

  • Utiliza $setWindowFields para dividir filmes por year e classificá-los por title. O estágio usa $sum com uma janela de documentos de [ "unbounded", "current" ] para criar os seguintes campos para cada documento:

    • cumulativeVotesInYear: a soma cumulativa em execução de imdb.votes.

    • rankInYear: um número de linha por partição atribuído por $documentNumber.

  • Utiliza $project para incluir title, year, imdb.votes, cumulativeVotesInYear e rankInYear na saída.

  • Utiliza $sort para classificar os resultados por ano e título.