Menu Docs
Página inicial do Docs
/ / /
Controlador Node.js
/ /

Operações compostas

Nesta página

  • Visão geral
  • Métodos incorporados

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.

O driver Node.js fornece os seguintes métodos para executar operações compostas:

  • findOneAndDelete()

  • findOneAndUpdate()

  • findOneAndReplace()

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.

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

await coll.findOneAndDelete({ x: "on" });

Nenhum documento correspondente

await coll.findOneAndDelete({ x: "off" });
true
await coll.findOneAndDelete({ x: "on" }, { includeResultMetadata: true });
← Especificar uma query