$sum (Acumulador de Soma)
Última atualização: 2026-10-09
$sum (Acumulador de Soma)
$sum é um acumulador que calcula o total de um campo especificado em um grupo (ou uma contagem quando recebe o literal 1). É usado dentro de $group para somas/contagens e em $project para somar elementos de array. Como expressão, ele soma uma expressão especificada em todos os documentos de entrada.
| Categoria | Acumuladores |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
// soma dentro de $group
{ $group: { _id: <chave>, total: { $sum: "$field" } } }
// contagem
{ $group: { _id: <chave>, count: { $sum: 1 } } }
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $sum: total e contagem por item
db.sales.aggregate([
{ $group: { _id: "$item", total: { $sum: "$price" }, count: { $sum: 1 } } }
])
Saída:
{ "_id": "abc", "total": 25, "count": 2 }
{ "_id": "xyz", "total": 30, "count": 3 }
📌 Notas
- Valores não numéricos são ignorados
- $sum: 1 é a forma idiomática de contar documentos em um grupo
- Em $group ele acumula no grupo; em $project ele pode somar elementos de array
🏷️ Tags Relacionados
💡 Casos Relacionados
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QO que acontece quando $sum encontra um campo string?
AStrings e valores não numéricos são ignorados (sem erro). Para tratamento estrito, converta com $toInt/$toDouble ou forneça padrão com $ifNull.
QO acumulador $sum só pode ser usado dentro de $group?
AComo acumulador, ele é específico de $group. Porém $sum também funciona como expressão de agregação simples, ex.: em $project para somar um array, com a mesma semântica.
QO que $sum retorna para um array vazio?
AEle retorna 0. Em $group, se um grupo não tiver documentos correspondentes ou tiver um array vazio, $sum acumula até 0, o que é útil como fallback de contagem.