我有一个模式 Foo ,它具有保存前和保存后的钩子。
对于我正在编写的一个特殊调试应用程序,我抓取了所有活动的 Foo 对象。然后,将它们保存为子文档,作为历史架构的一部分。
当我将它保存为子文档的一部分时,我不希望执行我的预/后保存挂钩。
处理这个问题的最佳方法是什么?
我想避免必须从 Foo 对象中提取所有数据,然后保存在一个新的非猫鼬对象中。
你可以为你的 Foo 对象定义一个字段,hookEnabled
你可以在你的钩子函数中检查它。让我给你举个例子;
Foo = new Schema({
...
hookEnabled:{
type: Boolean,
required: false,
default: true
}
...
});
在你的钩子里;
Foo.pre('save', function(next){
self = this
if (self.hookEnabled) {
// dou your job here
next();
} else {
// do nothing
next();
}
});
在调用保存函数之前,您可以将 hookEnabled 字段设置为 false,例如,
var fooModel = new Foo();
fooModel.hookEnabled = false;
希望能帮助到你