$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.

CategoriaAcumuladores
Versão do MongoDB1.0+
Idioma do Exemplomongosh (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

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.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%