我正在使用猫鼬findOneAndUpdate
,但仍然收到错误消息,
DeprecationWarning:不建议使用collection.findAndModify。改用findOneAndUpdate,findOneAndReplace或findOneAndDelete。
但是我什至没有使用findAndModify
,为什么它将查询转换为findAndModify
?
答案 0 :(得分:29)
您需要将查询useFindAndModify
中的选项设置为false
,如docs中所述。
(搜索关键字当前受支持的选项是)
'useFindAndModify':默认为true。设为false使 findOneAndUpdate()和findOneAndRemove()使用本机 findOneAndUpdate()而不是findAndModify()。
,如果您看到猫鼬的定义文件,则提到它调用findAndModify更新命令。
/**
* 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>;
最近在猫鼬文档(Click here)中针对以下提及的弃用进行了更新:
Mongoose的findOneAndUpdate()早于MongoDB驱动程序的 findOneAndUpdate()函数,因此它使用MongoDB驱动程序的 而是使用findAndModify()函数。
可以通过三种或更多种方式避免使用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});
答案 1 :(得分:11)
像这样全局更改猫鼬配置:
mongoose.set('useFindAndModify', false);
或者像这样在查询字符串中传递选项:
Person.findOneAndUpdate({_id: id}, {$set: body}, {new: true, useFindAndModify: false}).then(..
您还可以管理其他猫鼬弃用警告,如提及docs
mongoose.set('useNewUrlParser', true);
mongoose.set('useCreateIndex', true);
就是这样。
答案 2 :(得分:5)
您还可以在连接处通过需求选项useNewUrlParser
传递这些选项。查看以下内容-> https://mongoosejs.com/docs/deprecations.html
mongoose.connect(config.MONGODB_URI, { useNewUrlParser: true, useFindAndModify: false});
答案 3 :(得分:2)
猫鼬版本的更新如此之大,
要使用Model.findByIdAndUpdate()
,它需要一个选项参数,也请参见下文
List.findByIdAndUpdate(id, update, options, callback) // executes
解决此问题
将此useFindAndModify: false
传递到mongoose.connect的开头
mongoose.connect("mongodb://localhost:27017/yourDatabase", { useNewUrlParser: true, useUnifiedTopology: true ,useFindAndModify: false });
或
mongoose.set('useFindAndModify', false);
clickhere检查相关的弃用情况
答案 4 :(得分:0)
您必须更改连接方法选项才能摆脱它:
mongoose.connect("mongodb://localhost/DB_Name", {
keepAlive: true,
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false
});
您可以像这样使用。
答案 5 :(得分:0)
Mongoose.connect(Config.database,{useUnifiedTopology: true,useNewUrlParser: true,useFindAndModify:false});
跳过所有错误:-) 将此添加到index.js或您命名的任何名称上。我的意思是主要的js文件。 ;-)
答案 6 :(得分:0)
mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);
这些解决方案对我有用!