Operações compostas
Nesta página
Visão geral
A maioria das solicitações de banco de dados lê dados de um banco de dados ou grava dados em um banco de dados. No entanto, há casos em que você pode exigir uma única operação que leia e grave dados.
As operações compostas combinam operações de leitura e gravação em uma única declaração atômica, portanto, não há chance de os dados mudarem entre uma leitura e uma gravação subsequente; na verdade, ambas as operações ocorrem na mesma linha de código, do ponto de vista do seu aplicativo cliente.
Essa propriedade pode ser útil nos casos em que você deseja gravar em um documento específico, mas ainda não o encontrou. Se você apenas realizar uma leitura para o _id
do documento e tentar alterar o documento que acabou de encontrar, é possível que outra pessoa possa alterar o documento entre suas operações de leitura e gravação. Isso não impede que você faça esse trabalho, mas pode dificultar muito o tratamento de erros. As operações compostas ajudam a manter sua lógica direta, lidando com essa lógica inteiramente dentro do reconhecimento de data center por trás de uma camada de abstração, para que você não precise se preocupar com isso. Embora você possa realizar essa tarefa usando leituras e gravações separadas, isso exige que o aplicativo cliente lide normalmente com possíveis erros em qualquer estágio do processo e em vários estados de erro possíveis. Isso aumenta a complexidade do seu código e pode tornar o aplicativo do cliente quebradiço e difícil de testar.
Métodos incorporados
Existem três operações compostas principais:
findOneAndDelete() corresponde vários documentos a uma query fornecida e remove o primeiro desses documentos correspondentes.
findOneAndUpdate() corresponde a vários documentos para uma query fornecida e atualiza o primeiro desses documentos correspondentes usando o documento de atualização fornecido.
findOneAndReplace() corresponde vários documentos a uma query fornecida e substitui o primeiro desses documentos correspondentes usando o documento de substituição fornecido.
Todos os três métodos aceitam um objeto options
opcional com opções configuráveis declassificação e projeção que funcionam exatamente como as operações de leitura equivalentes. findOneAndUpdate()
e findOneAndDelete()
permitem que o cliente configure a opção returnDocument
, um booleano que determina se o método retorna a versão pré-atualizada ou pós-atualizada do documento modificado.