假设简单的架构:
var NestedSchema = mongooseSchema({
'id' : Number,
'someData' : String
});
var MySchema = mongoose.Schema({
'exampleField' : [NestedSchema]
};
我想创建模型实例而不为每个 NestedSchema
提供 id,如下所示:
new MySchemaModel({'exampleField' : [{'someData' : 'initial Data'}]});
我知道有 pre-save
Hook ,它允许我在保存之前设置 id
字段,但这对我来说还不够,因为我必须操作这些数据(并使用 ids)在我将模型实例保存在 mongo 中之前。所以问题是:是否有好的解决方案可以包含一些 pre-create
函数来初始化在 new
之后立即调用的数据?我正在寻找类似于 java 托管 bean 中的 PostConstruct
方法的东西。
最佳答案
问题最初回答here通过 Valeri Karpov - 非常感谢!
Take a look at the schema.queue function in the api docs, that enables you to queue up functions to execute every time a new document is created. Mongoose uses it internally for hooks but 4.1.0 formally added that to the public facing API
换句话来说,Mongoose 4.1.0 正式支持 schema.queue
,它允许钩子(Hook)方法(在特定模式中声明)来初始化链,因此这里的解决方案非常简单:
MySchema.methods.generateIds = function () {
// app logic here
}
// ...and at last
MySchema.queue('generateIds');
它将在ctor调用期间触发generateIds
方法!非常简单又有趣。
关于javascript - 将逻辑添加到 Mongoose 的 Model ctor 中的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31895276/