javascript - 将逻辑添加到 Mongoose 的 Model ctor 中的最佳实践是什么?

标签 javascript node.js mongodb mongoose hook

假设简单的架构:

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/

相关文章:

javascript - 使用javascript用表行数据填充表单

javascript - 通过超时解决一系列 promise 。 Promise.all

node.js - 找不到 Docker 卷和 package.json

javascript - Node.js 生成的 csv 文件显示英镑符号 (£)

javascript - 延迟加载 Angular 模块但不使用路由前缀

node.js - 用于文件上传的 JWT token 和 Multer( Node )

具有文档字段比较的 MongoDB partialFilterExpression

javascript - 将base64图像转换为Node Js中的文件

node.js - 创建利用内部数据库的 Node 模块是否有最佳实践?

javascript - 在Android设备上分析Chrome的 'Aw, snap'