$merge (Mesclar)

Última atualização: 2026-10-09

$merge (Mesclar)

$merge grava os resultados do pipeline em uma coleção de destino (possivelmente em outro banco de dados ou cluster), atualizando documentos existentes ou inserindo novos por uma chave de correspondência. Um superconjunto de $out, ele deve ser o estágio final. Opções principais: into, on (campo de correspondência), whenMatched e whenNotMatched. Adequado para ETL, visões materializadas e sincronização entre coleções.

CategoriaAvançado e Diagnóstico
Versão do MongoDB4.2+
Idioma do Exemplomongosh (Shell)

📝 Sintaxe

{ $merge: { into: "<collection>", on: "<matchField>", whenMatched: "merge", whenNotMatched: "insert" } }

⚙️ Parâmetros

intoColeção de destino, uma string ou objeto { db, coll }.
onCampo usado para corresponder documentos existentes; o padrão é _id.
whenMatchedComportamento em caso de correspondência: merge, replace, keepExisting ou um pipeline personalizado.
whenNotMatchedComportamento quando não há correspondência: insert ou discard.

Retorno:Nenhum documento continua; os resultados são gravados na coleção de destino

▶ Exemplo

Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):

// $merge: grava totais de clientes em cust_stats
db.orders.aggregate([
  { $group: { _id: '$cust_id', total: { $sum: '$amount' } } },
  { $merge: {
    into: 'cust_stats',
    on: '_id',
    whenMatched: 'replace',
    whenNotMatched: 'insert'
  } }
])

Saída:

// cust_stats é atualizada ou recebe inserções

📌 Notas

📚 Tutoriais Relacionados

❓ Perguntas Frequentes

QQual é a diferença entre $merge e $out?
A$out substitui a coleção inteira; $merge atualiza por chave, anexa incrementalmente e suporta destinos em outros bancos de dados.
QEle pode gravar em outro banco de dados?
ASim, por meio de uma string 'db.coll' ou de um objeto { db, coll }.
QComo chaves duplicadas são tratadas?
AwhenMatched decide: merge mescla campos, replace substitui o documento e keepExisting mantém o original.
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%