2013-10-18 28 views
2

我使用nodejs + express + mongoose。猫鼬钩“前/后保存”不工作for findOneAndUpdate

我为模块添加“pre/post save”钩子,它可以很好地保存功能。 但是,当我使用findOneAndUpdate(创建,如果它不存在),挂钩不会被调用。

这似乎是我能做的唯一方法是单独的findOneAndUpdate为两个函数,先搜索项然后再创建。

有没有更好的主意来解决这个问题?

回答

9

从猫鼬文档:

虽然值使用findAndModify助手时投射到它们的适当的类型,下面不施加:

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

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

reference

UPDATE:由于猫鼬4.0,你可以使用runValidators选项,从更新日志:

#860:你可以有选择地运行验证,如果创建一个新文档设置默认值update()和findOneAndUpdate()调用。为了访问这些功能,当您调用update()或findOneAndUpdate()时,必须显式设置runValidators和setDefaultsOnInsert选项。请注意,setDefaultsOnInsert选项与MongoDB < = 2.2不兼容。进一步的注意事项update()和findOneAndUpdate()显式运行具有空上下文的验证器(也就是验证器函数中的这个== == null)。

+2

{runValidators:true}可用作猫鼬中的第三个参数4 – a77icu5

+1

谢谢@ a77icu5我已更新答案! – krasu