我有一个模式Foo,它有pre和post保存挂钩。对于我正在编写的一个特殊调试应用程序,我获取了所有活动的Foo对象,然后将它们保存为子文档,作为History模式的一部分。当我将其保存为子文档的一部分时,我不希望执行前/后保存挂钩。什么是最好的处理方法?我希望避免从Foo对象中提取所有数据,然后保存到一个新的非mongoose对象中。
s71maibg1#
你可以给你的Foo对象定义一个字段,比如hookEnabled,你可以在你的钩子函数中检查它。
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;
希望能有所帮助
lb3vh1jj2#
这个问题很老了,但我认为现在指出总比不指出好。Mongoose在Document对象中包含了一个名为$locals的属性,它是一种任意字段。他们甚至在文档中说,它的一个很好的用途是将信息传递给中间件https://mongoosejs.com/docs/api/document.html#document_Document-$locals
Document
$locals
2条答案
按热度按时间s71maibg1#
你可以给你的Foo对象定义一个字段,比如
hookEnabled
,你可以在你的钩子函数中检查它。在你的钩子里;
调用保存函数之前,可以将hookEnabled字段设置为false,例如:
希望能有所帮助
lb3vh1jj2#
这个问题很老了,但我认为现在指出总比不指出好。Mongoose在
Document
对象中包含了一个名为$locals
的属性,它是一种任意字段。他们甚至在文档中说,它的一个很好的用途是将信息传递给中间件https://mongoosejs.com/docs/api/document.html#document_Document-$locals