Mongoose hook"pre/post save"不适用于findOneAndUpdate

Fan*_*ung 3 mongoose mongodb node.js

我正在使用nodejs + express + mongoose.

我为模块添加了"pre/post save"挂钩,它可以正常使用保存功能.但是当我使用findOneAndUpdate(如果它不存在则创建)时,不会调用该钩子.

似乎我能做的唯一方法就是将findOneAndUpdate分成两个函数,首先搜索项目然后再创建.

有没有更好的想法来解决这个问题?

kra*_*asu 10

来自mongoose文档:

虽然在使用findAndModify帮助程序时将值强制转换为适当的类型,但以下内容不适用:

  • 默认
  • 制定者
  • 验证
  • 中间件

如果您需要这些功能,请使用首先检索文档的传统方法.

参考

更新:从Mongoose 4.0开始,您可以使用runValidatorsChangelog中的选项:

#860:如果在update()和findOneAndUpdate()调用上创建了新文档,则可以选择运行验证器并设置默认值.要访问这些功能,必须在调用update()或findOneAndUpdate()时显式设置runValidators和setDefaultsOnInsert选项.请注意,setDefaultsOnInsert选项与MongoDB <= 2.2不兼容.进一步说明update()和findOneAndUpdate()显式运行具有空上下文的验证器(即验证器函数中的此=== null).

  • {runValidators:true}可用作mongoose 4中的第三个参数 (2认同)