sql >> Database teknologi >  >> NoSQL >> MongoDB

DeprecationWarning:collection.findAndModify er forældet. Brug findOneAndUpdate, findOneAndReplace eller findOneAndDelete i stedet?

Du skal indstille indstillingen i forespørgslen useFindAndModify til false , som nævnt i dokumenterne.

(søgeordet I øjeblikket understøttede muligheder er )

'useFindAndModify':sand som standard. Indstil til false til makefindOneAndUpdate() og findOneAndRemove() brug nativefindOneAndUpdate() i stedet for findAndModify().

og hvis du ser definitionsfilen for mongoose, hvor det er nævnt, at den kalder findAndModify update-kommandoen.

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

For nylig opdateret i mongoose-dokumenterne (Klik her) for disse afskrivninger, hvor nævnt:

Mongooses findOneAndUpdate() daterer længe MongoDB-driverensfindOneAndUpdate()-funktionen, så den bruger MongoDB-driverensfindAndModify()-funktionen i stedet.

Der er tre eller flere måder, hvorpå du kan undgå brugen af ​​FindAndModify :

  1. På globalt niveau:Indstil indstillingen til falsk.
// 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å forbindelsesniveau:vi kan konfigurere ved hjælp af forbindelsesmulighederne:
    mongoose.connect(uri, { useFindAndModify: false });
  1. På forespørgselsniveau:
   await ModelName.findOneAndUpdate({matchQuery},
   {$set: updateData}, {useFindAndModify: false});



  1. Sådan fjerner du et element fra et dobbelt indlejret array i et MongoDB-dokument.

  2. Zookeeper vs In-memory-data-grid vs Redis

  3. MongoDB $addToSet

  4. Mongoose Model.find er ikke en funktion?