Mongoose - 无论如何要防止中间件保存挂钩在某些条件下执行(例如保存为子文档)?

bla*_*k3r 7 mongoose mongodb node.js

我有一个模式Foo,它有前后保存挂钩.

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

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

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

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

Hüs*_*BAL 8

你可以为你的Foo对象定义一个字段hookEnabled,你可以在你的钩子函数中检查它.让我给你举个例子;

Foo = new Schema({
    ...
    hookEnabled:{
        type: Boolean,
        required: false,
        default: true
    }
    ...
 });
Run Code Online (Sandbox Code Playgroud)

在你的钩子里;

Foo.pre('save', function(next){
  self = this
  if (self.hookEnabled) {
    // dou your job here
    next();
  } else {
    // do nothing
    next();
  }
});
Run Code Online (Sandbox Code Playgroud)

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

var fooModel = new Foo();
fooModel.hookEnabled = false;
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

  • 我知道这已经很旧了,但是有没有办法用“findOneAndUpdate”来做到这一点?回调中“this”的上下文是 Mongoose 查询,而不是文档。有一点麻烦.. (2认同)