是否有可能在运行时动态地向模型添加方法?
mongoose - Is it possible to dynamically add methods to model at runtime?
我知道你可以在模式上定义方法和静态
var schema = new mongoose.Schema({});
schema.methods.fn = function(){}
但是,在您从模式中创建了模型之后,这可能吗?
var model = mongoose.model(schema);
我试着
model.schema.methods.fn2 = function(){};
但它不起作用。
我想在运行时添加某些方法,并且由于运行时唯一重要的事情是模型,而不是模式,我想知道您是否可以继续以某种方式动态地向模型的内部模式添加方法?
是的,你可以像添加其他javascript类一样添加方法到你的猫鼬模型。
var Person = mongoose.model('Person', PersonSchema);
Person.prototype.myMethod = function() {
console.log(this.toString());
}
var bob = new Person({
name: 'Bob'
});
myModel.myMethod();
请注意,像这样将javascript类大写是一个很好的惯例,它使读者清楚地知道它是一个应该使用new
调用的构造函数。
您可以通过在模型对象上创建原型来在任何注册模型上创建原型。
模型定义文件
//define your schema
module.exports = mongoose.model('model', schema);
使用mongoose对象来访问您选择的模型并添加一个方法。如果愿意,可以将模型名和函数名设置为变量:
if (!mongoose.models['model']['fn2']) {
mongoose.models['model'].prototype['fn2'] = function() {
console.log("Yeah!");
}
}
一旦这个函数被原型化,只需在这个模型中的任何文档上调用实例函数:
model.findById(someId).exec(function(err, doc) {
if (doc) {
if (typeof doc.fn2 === 'function') {
doc.fn2(); //writes "Yeah!" to the console.
}
}
});
相关文章:
- 为什么将子模型添加到两个父模型
- 主干.js:为每个模型添加验证
- 调用ko.applyBindings后,向Knockout视图模型添加新属性
- 第一步's与THRE.js:试图将搅拌机模型添加到场景中的问题
- 在knocket js中应用绑定后,向视图模型添加新属性
- 创建 Dojo 网格并从数据模型添加对话框
- 向骨干模型添加更多功能
- 主干:集合将随机模型添加到自身
- 将模型添加到木偶项视图定义之外的主干集合
- 将模型添加到主干.js收集以静默方式失败
- 从不同的控制器 Ember.js 向模型添加新记录
- 确保不会将重复的模型添加到集合中
- 主干.js:在将模型添加到集合之前不进行工作验证
- 将新模型添加到主干集合,而不是替换
- 正在将模型添加到具有索引的集合中
- 主干:将模型添加到集合并渲染视图
- 允许使用向asp.net mvc4模型添加项目
- 无法将模型添加到主干集合
- Backbone.js将从服务器检索到的模型添加到集合中
- 将模型添加到集合不起作用