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.
Se você executar cada operação separadamente, outra solicitação poderá alterar os dados entre as operações de leitura e gravação. Essas alterações de dados podem não impedir que sua operação seja bem-sucedida, mas podem dificultar o tratamento de erros. Quando seu aplicativo lida com possíveis erros em qualquer estágio do processo, ele pode se tornar quebradiço e difícil de testar.
Métodos incorporados
O driver Node.js fornece os seguintes métodos para executar operações compostas:
Esses métodos aceitam um objeto options
opcional com opções classificação e projeção configuráveis.
Você também pode definir a opção includeResultMetadata
para especificar o tipo de retorno de cada um desses métodos. Para saber mais sobre essa opção, consulte a seção Opção includeResultMetadata deste guia.
Os métodos findOneAndUpdate()
e findOneAndDelete()
usam a configuração returnDocument
, que especifica se o método retorna a versão pré-atualização ou pós-atualização do documento modificado.
Opção includeResultMetadata
A opção includeResultMetadata
determina o tipo de retorno dos métodos compostos.
O padrão desta configuração é false
, o que significa que cada método retorna o documento correspondente. Se nenhum documento for correspondido, cada método retornará null
. Se você definir includeResultMetadata
como true
, o método retornará um tipo ModifyResult
que contém o documento e os metadados encontrados.
Suponha que uma collection contenha apenas o seguinte documento:
{ _id: 1, x: "on" }
A tabela a seguir mostra como o valor da opção includeResultMetadata
altera o tipo de retorno do método findOneAndDelete()
:
Valor da opção | sintaxe e saída | ||||
---|---|---|---|---|---|
Padrão: false | documento correspondente
Nenhum documento correspondente
| ||||
true |
|