sql >> Databasteknik >  >> NoSQL >> MongoDB

DeprecationWarning:collection.findAndModify är utfasad. Använd findOneAndUpdate, findOneAndReplace eller findOneAndDelete istället?

Du måste ställa in alternativet i frågan useFindAndModify till false , som nämns i dokumenten.

(sökordet De alternativ som stöds för närvarande är )

'useFindAndModify':sant som standard. Ställ in på false för makefindOneAndUpdate() och findOneAndRemove() använd nativefindOneAndUpdate() istället för findAndModify().

och om du ser definitionsfilen för mongoose, där nämns att den anropar findAndModify update-kommandot.

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

Nyligen uppdaterad i mongoose-dokumenten (Klicka här) för dessa avskrivningar där de nämns:

Mongooses findOneAndUpdate() är långt före MongoDB-drivrutinensfindOneAndUpdate()-funktionen, så den använder MongoDB-drivrutinensfindAndModify()-funktionen istället.

Det finns tre eller fler sätt på vilka du kan undvika användningen av FindAndModify :

  1. På global nivå:Ställ in alternativet på 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. På anslutningsnivå:vi kan konfigurera med anslutningsalternativen:
    mongoose.connect(uri, { useFindAndModify: false });
  1. På frågenivå:
   await ModelName.findOneAndUpdate({matchQuery},
   {$set: updateData}, {useFindAndModify: false});



  1. Mongoose, sortera sökfrågan efter ifyllt fält

  2. Laravel Caching med Redis är väldigt långsam

  3. Installera Apache CouchDB på CentOS 7

  4. MongoDB $setEquals