$accumulator (Acumulador Personalizado)
Última atualização: 2026-10-09
$accumulator (Acumulador Personalizado)
$accumulator define lógica de acumulador personalizada com callbacks JavaScript — init, accumulate, merge, finalize — dentro de $group. Ele cobre lógica de agregação que os acumuladores nativos não conseguem expressar. Ele executa JavaScript no lado do servidor e é mais lento que os acumuladores nativos.
| Categoria | Acumuladores |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ $accumulator: { init: <function>, accumulate: <function>, accumulateArgs: [ <expression> ], merge: <function>, finalize: <function>, lang: "js" } }
Retorno:Resultado de acumulação personalizado (tipo definido pelas suas funções)
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $accumulator: conta preços distintos por item com um Set
db.sales.aggregate([
{ $group: { _id: '$item', uniq: {
$accumulator: {
init: function() { return new Set(); },
accumulate: function(set, v) { set.add(v); },
accumulateArgs: ['$price'],
merge: function(a, b) { for (var v of b) a.add(v); },
finalize: function(set) { return set.size; },
lang: 'js'
}
} }
])
Saída:
// Contagem de preços distintos por item
📌 Notas
- Executa JavaScript no lado do servidor, mais lento que acumuladores nativos
- Os callbacks precisam ser serializáveis e não podem capturar variáveis externas
- O callback merge combina resultados de grupos em configurações fragmentadas ou distribuídas
🏷️ Tags Relacionados
💡 Casos Relacionados
Mais casos práticos em breve.
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QQuão rápido é $accumulator?
AEle executa JS no lado do servidor e é mais lento que os acumuladores nativos; evite-o quando possível.
QQuais callbacks são obrigatórios?
Ainit, accumulate e accumulateArgs são obrigatórios; merge e finalize são opcionais.
QE se o servidor não suportar JavaScript?
AGera erro; um administrador precisa habilitar a execução de scripts no servidor antes.