📜  DeprecationWarning:Mongoose:不推荐使用未将 `useFindAndModify` 选项设置为 false 的`findOneAndUpdate()` 和`findOneAndDelete()`.请参阅:https:mongoosejs.com docs deprecations.html#findandmodify (1)

📅  最后修改于: 2023-12-03 15:30:26.348000             🧑  作者: Mango

Mongoose 用findOneAndUpdate()和findOneAndDelete()方法弃用警告

最新版本的Mongoose中,使用findOneAndUpdate()和findOneAndDelete()方法时,将会收到DeprecationWarning警告。警告内容提示,不推荐使用未将 useFindAndModify 选项设置为 false 的这两个方法,建议使用替代方案。详细内容可以参考官方文档

背景介绍

Mongoose是一个Node.js中对象模型(ODM)库,用于在优雅的Node.js对象模型中操作MongoDB数据库。该库帮助开发者用简单的JavaScript代码定义Schema(文档模型),并通过API支持CRUD操作,使得操作MongoDB数据库变得容易。

具体方案

根据官方文档提供的方案,可以通过设置useFindAndModify选项为false来禁用警告信息。该选项默认为true,如果不修改该选项,则使用findOneAndUpdate()和findOneAndDelete()方法时将会收到DeprecationWarning警告信息。

以下是示例代码,展示如何设置useFindAndModify选项:

mongoose.set('useFindAndModify', false);
替代方法

Mongoose官方推荐使用以下方法来替代findOneAndUpdate()和findOneAndDelete()方法:

findOneAndUpdate()
  • 使用findById()查询,然后对返回的model执行修改操作
const doc = await Model.findById(id);
doc.field = newValue;
await doc.save();
  • 使用updateOne()或者updateMany()方法
const doc = await Model.updateOne({ _id: id }, { field: newValue });
findOneAndDelete()
  • 使用findById()查询,然后对返回的model执行删除操作
const doc = await Model.findById(id);
await doc.remove();
  • 使用deleteOne()或者deleteMany()方法
const doc = await Model.deleteOne({ _id: id });
总结

本文简单介绍了Mongoose库中,使用findOneAndUpdate()和findOneAndDelete()方法时,会收到DeprecationWarning警告信息的问题,以及如何解决和替代方法。如果您使用了这两个方法,强烈建议您遵循官方推荐,修改代码,避免出现问题。