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. } } });