mongoose – 是否有可能在运行时dynamic添加方法进行build模?
我知道你可以在模式上定义方法和静态
var schema = new mongoose.Schema({}); schema.methods.fn = function(){}
但是从模式创build模型之后有可能吗?
var model = mongoose.model(schema);
我试过了
model.schema.methods.fn2 = function(){};
但它不起作用。
我想在运行时添加某些方法,因为在运行时唯一重要的是模型,而不是模式,我想知道是否可以继续以某种方式dynamic地添加方法到模型的内部模式?
是的,你可以添加方法到你的mongoose模型就像任何其他的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
来调用。
您可以通过在模型对象上创build原型,在任何注册模型上创build原型。
在您的模型定义文件中
//define your schema module.exports = mongoose.model('model', schema);
随处可见
使用mongoose对象访问您select的模型并添加一个方法。 如果您想要,可以将模型名称和函数名称作为variables:
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. } } });