使用 Mongoose 时的 MongoDB 弃用警告

Posted

技术标签:

【中文标题】使用 Mongoose 时的 MongoDB 弃用警告【英文标题】:MongoDB deprecation warnings when using Mongoose 【发布时间】:2019-02-21 00:56:27 【问题描述】:

我使用的是猫鼬版本 5.2.13,我想是最新的。但是当我尝试执行 .findOneAndUpdate() 查询时,Mongo 会抛出一个弃用警告:

DeprecationWarning:collection.findAndModify 已弃用。采用 findOneAndUpdate、findOneAndReplace 或 findOneAndDelete。

这种已知行为是否应该在未来版本的 mongoose 中修复?或者我应该对此做些什么?我正在运行的查询是:

output2 = await dbUser.findOneAndUpdate(
    _id: args.authorid ,
    $push:  posts: newpost2  ,
);

如果MongoDB mongoose collection.find options Deprecation Warning 提供了可能的建议,我不太愿意降级我的软件包。

【问题讨论】:

为什么会降级你的模块。如果正在使用findAndModify ,请阅读它所说的警告,然后确保它已被弃用。如果您不使用,请忽略它。 弃用警告没有说“如果”findAndModify 正在使用,我想只有在确实调用了违规方法时,MongoDB 才会抛出警告。降级的想法是在类似的 SO 帖子中提出的:***.com/questions/51916630/…。 我宁愿尝试第一个答案的建议。 Mongodb 本身并没有在他们的查找和修改文档中提到任何此类内容。 你试过设置mongoose.set('useFindAndModify', false);吗? @Veeram,这行得通,谢谢。我只是希望有一个更通用的解决方案,而不必在每个 mongoose 实例上显式设置参数。但是,如果没有其他选择,您能否将其发布为答案,以便我接受并关闭? 【参考方案1】:

参考:https://mongoosejs.com/docs/deprecations.html

添加参数:useFindAndModify: false

例如代码:

    mongoose.connect(
        MONGODB_URL, 
        useFindAndModify: false
      ,
      (err, db) => 
        if (err) throw err;
        console.log(`MongoDB connected on port $MONGODB_PORT`);
      
    );

【讨论】:

【参考方案2】:

我认为要避免此警告,您必须将useFindAndModify: false 添加到Mongoose documentation 中提到的连接选项中

如下:

mongoose.connect(uri, useFindAndModify: false );


另外,您可以将其升级到(v5.12.15);这是最新版本;除了使用前面提到的连接选项

【讨论】:

以上是关于使用 Mongoose 时的 MongoDB 弃用警告的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 弃用警告

连接到猫鼬时的弃用警告

UnhandledPromiseRejectionWarning:|弃用警告:|猫鼬5

(节点:71307)[DEP0079] 弃用警告

Mongoose 的默认 Promise 库在 MEAN 堆栈中已弃用

DeprecationWarning:监听 Db 类上的事件已被弃用,将在下一个主要版本中删除