MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

VerfallWarnung:collection.findAndModify ist veraltet. Verwenden Sie stattdessen findOneAndUpdate, findOneAndReplace oder findOneAndDelete?

Sie müssen die Option in der Abfrage useFindAndModify setzen auf false , wie in der Dokumentation erwähnt.

(Suchbegriff Aktuell unterstützte Optionen sind )

'useFindAndModify':standardmäßig wahr. Auf false setzen, um makefindOneAndUpdate() und findOneAndRemove() nativefindOneAndUpdate() statt findAndModify() zu verwenden.

und wenn Sie die Definitionsdatei von Mongoose sehen, wo erwähnt, dass sie den update-Befehl findAndModify aufruft.

 /**
  * 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>;

Kürzlich aktualisiert in den Mongoose-Dokumenten (hier klicken) für diese Verwerfungen, wo erwähnt:

Die Funktion findOneAndUpdate() von Mongoose ist lange älter als die Funktion findOneAndUpdate() des MongoDB-Treibers, sodass stattdessen die Funktion findAndModify() des MongoDB-Treibers verwendet wird.

Es gibt drei oder mehr Möglichkeiten, wie Sie die Verwendung von FindAndModify vermeiden können :

  1. Auf globaler Ebene:Setzen Sie die Option auf "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. Auf Verbindungsebene:Wir können mit den Verbindungsoptionen konfigurieren:
    mongoose.connect(uri, { useFindAndModify: false });
  1. Auf Abfrageebene:
   await ModelName.findOneAndUpdate({matchQuery},
   {$set: updateData}, {useFindAndModify: false});