8

我有一个模式 Foo ,它具有保存前和保存后的钩子。

对于我正在编写的一个特殊调试应用程序,我抓取了所有活动的 Foo 对象。然后,将它们保存为子文档,作为历史架构的一部分。

当我将它保存为子文档的一部分时,我不希望执行我的预/后保存挂钩。

处理这个问题的最佳方法是什么?

我想避免必须从 Foo 对象中提取所有数据,然后保存在一个新的非猫鼬对象中。

4

1 回答 1

10

你可以为你的 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;

希望能帮助到你

于 2013-12-24T07:31:21.910 回答