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

y0u0uwnf  于 2023-01-01  发布在  Go
关注(0)|答案(2)|浏览(134)

我有一个模式Foo,它有pre和post保存挂钩。
对于我正在编写的一个特殊调试应用程序,我获取了所有活动的Foo对象,然后将它们保存为子文档,作为History模式的一部分。
当我将其保存为子文档的一部分时,我不希望执行前/后保存挂钩。
什么是最好的处理方法?
我希望避免从Foo对象中提取所有数据,然后保存到一个新的非mongoose对象中。

s71maibg

s71maibg1#

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

希望能有所帮助

lb3vh1jj

lb3vh1jj2#

这个问题很老了,但我认为现在指出总比不指出好。Mongoose在Document对象中包含了一个名为$locals的属性,它是一种任意字段。他们甚至在文档中说,它的一个很好的用途是将信息传递给中间件
https://mongoosejs.com/docs/api/document.html#document_Document-$locals

相关问题