J'utilise mangouste findOneAndUpdate
mais j'obtiens toujours l'erreur,
DeprecationWarning: collection.findAndModify est obsolète. Utilisez plutôt findOneAndUpdate, findOneAndReplace ou findOneAndDelete.
Mais je n'utilise même pas findAndModify
, pourquoi convertit-il ma requête en findAndModify
?
Vous devez définir l'option de la requête useFindAndModify
sur false
, comme indiqué dans docs .
(mot-clé de recherche . Les options actuellement prises en charge sont )
'useFindAndModify': true par défaut. Définissez sur false pour que findOneAndUpdate () et findOneAndRemove () utilisent natif findOneAndUpdate () plutôt que findAndModify ().
et si vous voyez le fichier de définition de mangouste, il est mentionné qu'il appelle la commande findAndModify update.
/**
* 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 la documentation Mangouste ( Cliquez ici ) pour ces déprécations 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.
Il existe trois manières, voire plus, d'éviter l'utilisation de FindAndModify
:
// Make Mongoose use `findOneAndUpdate()`. Note that this option is `true`
// by default, you need to set it to false.
mongoose.set('useFindAndModify', false);
mongoose.connect(uri, { useFindAndModify: false });
await ModelName.findOneAndUpdate({matchQuery},
{$set: updateData}, {useFindAndModify: false});
Changez la configuration de la mangouste globalement comme ceci:
mongoose.set('useFindAndModify', false);
Ou passez les options dans votre chaîne de requête comme ceci:
Person.findOneAndUpdate({_id: id}, {$set: body}, {new: true, useFindAndModify: false}).then(..
Vous pouvez également gérer les autres avertissements relatifs à la dépréciation des mangoustes sous la forme d'une mention docs
mongoose.set('useNewUrlParser', true);
mongoose.set('useCreateIndex', true);
C'est ça.
vous pouvez également passer les options à la connexion avec l'option de besoin useNewUrlParser
. Regardez ce qui suit -> https://mongoosejs.com/docs/deprecations.html
mongoose.connect(config.MONGODB_URI, { useNewUrlParser: true, useFindAndModify: false});
Vous devez modifier les options de votre méthode de connexion pour vous en débarrasser:
mongoose.connect("mongodb://localhost/DB_Name", {
keepAlive: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false
});
Vous pouvez utiliser comme ça.