我使用nodejs + express + mongoose。猫鼬钩“前/后保存”不工作for findOneAndUpdate
我为模块添加“pre/post save”钩子,它可以很好地保存功能。 但是,当我使用findOneAndUpdate(创建,如果它不存在),挂钩不会被调用。
这似乎是我能做的唯一方法是单独的findOneAndUpdate为两个函数,先搜索项然后再创建。
有没有更好的主意来解决这个问题?
我使用nodejs + express + mongoose。猫鼬钩“前/后保存”不工作for findOneAndUpdate
我为模块添加“pre/post save”钩子,它可以很好地保存功能。 但是,当我使用findOneAndUpdate(创建,如果它不存在),挂钩不会被调用。
这似乎是我能做的唯一方法是单独的findOneAndUpdate为两个函数,先搜索项然后再创建。
有没有更好的主意来解决这个问题?
从猫鼬文档:
虽然值使用findAndModify助手时投射到它们的适当的类型,下面不施加:
- 默认
- 制定者
- 验证
- 中间件
如果您需要这些功能,请使用传统方法首先检索文档。
UPDATE:由于猫鼬4.0,你可以使用runValidators
选项,从更新日志:
#860:你可以有选择地运行验证,如果创建一个新文档设置默认值update()和findOneAndUpdate()调用。为了访问这些功能,当您调用update()或findOneAndUpdate()时,必须显式设置runValidators和setDefaultsOnInsert选项。请注意,setDefaultsOnInsert选项与MongoDB < = 2.2不兼容。进一步的注意事项update()和findOneAndUpdate()显式运行具有空上下文的验证器(也就是验证器函数中的这个== == null)。
{runValidators:true}可用作猫鼬中的第三个参数4 – a77icu5
谢谢@ a77icu5我已更新答案! – krasu