it-swarm.com.de

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

Ich benutze Mungo findOneAndUpdate aber erhalte immer noch den Fehler,

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

Aber ich verwende nicht einmal findAndModify. Warum konvertiert es meine Abfrage in findAndModify?

28
Sudhanshu Gaur

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

(Suchbegriff Derzeit unterstützte Optionen sind )

'useFindAndModify': Standardmäßig true. Auf false setzen, damit findOneAndUpdate () und findOneAndRemove () natives findOneAndUpdate () anstelle von findAndModify () verwenden.

und wenn Sie die Definitionsdatei von Mungo sehen, wo erwähnt, dass es findAndModify Update-Befehl 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 Mungo-Dokumenten ( Klicken Sie hier ) für diese Ablehnung, wo erwähnt:

FindOneAndUpdate () von Mongoose geht der Funktion findOneAndUpdate () des MongoDB-Treibers lange voraus, 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});

37
Shivam Pandey

Ändern Sie die Mungokonfiguration global wie folgt:

mongoose.set('useFindAndModify', false);

Oder übergeben Sie die Optionen in Ihrer Abfragezeichenfolge wie folgt:

Person.findOneAndUpdate({_id: id}, {$set: body}, {new: true, useFindAndModify: false}).then(..

Sie können auch die anderen Warnungen vor Mungos als Erwähnung docs verwalten

mongoose.set('useNewUrlParser', true);
mongoose.set('useCreateIndex', true);

Das ist es.

12

sie können die Optionen auch an der Verbindung mit der Anforderungsoption useNewUrlParser übergeben. Schauen Sie sich folgendes an -> https://mongoosejs.com/docs/deprecations.html

mongoose.connect(config.MONGODB_URI, { useNewUrlParser: true, useFindAndModify: false}); 
5
Polliny

Sie müssen Ihre Connect-Methodenoptionen ändern, um sie zu entfernen:

mongoose.connect("mongodb://localhost/DB_Name", {
  keepAlive: true,
  useNewUrlParser: true,
  useCreateIndex: true,
  useFindAndModify: false
});

Sie können so verwenden.

0
Devesh