mongoose – 无论如何,以防止中间件保存挂钩在特定条件下执行(例如被保存为子文档)?

我有一个架构Foo有前后保存钩子。

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

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

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

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

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

在调用save函数之前,可以将hookEnabled字段设置为false,

 var fooModel = new Foo(); fooModel.hookEnabled = false; 

希望能帮助到你