MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

DeprecationWarning:collection.findAndModify está obsoleta. Use findOneAndUpdate, findOneAndReplace ou findOneAndDelete em vez disso?


Você precisa definir a opção na consulta useFindAndModify para false , conforme mencionado nos documentos.

(palavra-chave de pesquisa As opções atualmente suportadas são )

'useFindAndModify':true por padrão. Defina como false para makefindOneAndUpdate() e findOneAndRemove() use nativefindOneAndUpdate() em vez de findAndModify().

e se você vir o arquivo de definição de mangusto, onde mencionou que ele chama o comando de atualização findAndModify.
 /**
  * Issues a mongodb findAndModify update command.
  * Finds a matching document, updates it according to the update arg, 
    passing any options,
  * and returns the found document (if any) to the callback. The query 
    executes immediately
  * if callback is passed else a Query object is returned.
  */
 findOneAndUpdate(): DocumentQuery<T | null, T>;

Atualizado recentemente nos documentos do mangusto (Clique aqui) para essas descontinuações quando mencionadas:

O findOneAndUpdate() do Mongoose é muito anterior à função do driver do MongoDB, então ele usa a função do driver do MongoDB como o findAndModify().

Existem três maneiras ou mais pelas quais você pode evitar o uso de FindAndModify :
  1. No nível global:defina a opção como false.
// Make Mongoose use `findOneAndUpdate()`. Note that this option is `true`
// by default, you need to set it to false.
mongoose.set('useFindAndModify', false);
  1. No nível de conexão:podemos configurar usando as opções de conexão:
    mongoose.connect(uri, { useFindAndModify: false });
  1. No nível da consulta:
   await ModelName.findOneAndUpdate({matchQuery},
   {$set: updateData}, {useFindAndModify: false});