MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

DeprecationWarning :collection.findAndModify est obsolète. Utilisez plutôt findOneAndUpdate, findOneAndReplace ou findOneAndDelete ?

Vous devez définir l'option dans la requête useFindAndModify à false , comme mentionné dans la documentation.

(mot-clé de recherche Les options actuellement prises en charge sont )

'useFindAndModify' :vrai par défaut. Définir sur false pour que makefindOneAndUpdate() et findOneAndRemove() utilisent nativefindOneAndUpdate() plutôt que findAndModify().

et si vous voyez le fichier de définition de mangouste, où mentionné qu'il appelle la commande de mise à jour 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>;

Récemment mis à jour dans les docs mangouste (Cliquez ici) pour ces dépréciations où mentionné :

La fonction findOneAndUpdate() de Mongoose est antérieure à la fonction findOneAndUpdate() du pilote MongoDB, elle utilise donc la fonction findAndModify() du pilote MongoDB à la place.

Il existe trois façons ou plus d'éviter l'utilisation de FindAndModify :

  1. Au niveau global :définissez l'option sur faux.
// Make Mongoose use `findOneAndUpdate()`. Note that this option is `true`
// by default, you need to set it to false.
mongoose.set('useFindAndModify', false);
  1. Au niveau de la connexion :nous pouvons configurer à l'aide des options de connexion :
    mongoose.connect(uri, { useFindAndModify: false });
  1. Au niveau de la requête :
   await ModelName.findOneAndUpdate({matchQuery},
   {$set: updateData}, {useFindAndModify: false});