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).