findOneAndUpdate() (Atualizar e Retornar um Documento)

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

findOneAndUpdate() (Atualizar e Retornar um Documento)

findOneAndUpdate() atualiza o primeiro documento que corresponder a um filtro e retorna o próprio documento — antes ou depois da atualização, controlado por `returnDocument`: 'before' (padrão) ou 'after', ex.: `db.users.findOneAndUpdate({ name: 'Alice' }, { $set: { age: 22 } }, { returnDocument: 'after' })`. Diferente de updateOne(), que retorna apenas contadores, ele lê o documento de volta, adequando-se a fluxos que precisam do valor atualizado imediatamente, como contadores ou transições de máquinas de estado.

CategoriaEscrita
Versão do MongoDB1.0+
Idioma do Exemplomongosh (Shell)

📝 Sintaxe

db.<collection>.findOneAndUpdate(<filter>, <update>, { returnDocument: 'after', upsert: <bool> })

⚙️ Parâmetros

filtroPredicado que corresponde ao documento a atualizar.
atualizaçãoObjeto de operadores de atualização, por exemplo {$inc: {count: 1}}.
returnDocumentOpcional. 'before' retorna o documento antes da atualização, 'after' o depois; o padrão é 'before'.
upsertOpcional. Insere quando nada corresponde; padrão false.

Retorno:O documento antes (ou depois) da atualização; null se nada corresponder e o upsert estiver desativado.

▶ Exemplo

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

// findOneAndUpdate: atualiza Alice, retorna o novo doc
const doc = db.users.findOneAndUpdate(
  { name: 'Alice' }, { $set: { age: 22 } },
  { returnDocument: 'after' }
)
doc

Saída:

{
  _id: ObjectId('64c8a1b20000000000000001'),
  name: 'Alice',
  age: 22
}

📌 Notas

Mais casos práticos em breve.

📚 Tutoriais Relacionados

❓ Perguntas Frequentes

QO findOneAndUpdate retorna o documento antes ou depois da atualização?
APor padrão retorna o documento pré-atualização; passe {returnDocument: 'after'} para o pós-atualização.
QQual é a diferença entre findOneAndUpdate e updateOne?
AupdateOne() retorna apenas contadores; findOneAndUpdate() retorna o documento, útil quando você precisa do valor antigo ou novo.
QO que findOneAndUpdate retorna quando nada corresponde?
AEle retorna null (com upsert desligado). Com upsert ligado, um novo documento é inserido e retornado.
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%