我认为这个问题类似于这个问题,但术语不同。来自Mongoose 4 文档:
我们还可以定义自己的自定义文档实例方法。
// define a schema
var animalSchema = new Schema({ name: String, type: String });
// assign a function to the "methods" object of our animalSchema
animalSchema.methods.findSimilarTypes = function (cb) {
return this.model('Animal').find({ type: this.type }, cb);
}
现在我们的所有动物实例都可以使用 findSimilarTypes 方法。
接下来:
将静态方法添加到模型中也很简单。继续使用我们的 animalSchema:
// assign a function to the "statics" object of our animalSchema
animalSchema.statics.findByName = function (name, cb) {
return this.find({ name: new RegExp(name, 'i') }, cb);
}
var Animal = mongoose.model('Animal', animalSchema);
Animal.findByName('fido', function (err, animals) {
console.log(animals);
});
似乎使用静态方法后,每个动物实例都可以使用findByName
方法。在模式中,statics
和methods
对象是什么?它们之间有何区别?为什么我会选择其中之一?
fido.findByName
,因为fido
通过this.model('Animal')
可以访问整个集合。但是,如果一个实例方法不使用实例的任何属性,那么这样做就没有太多意义。 - Aaron DufourAnimal.statics.methodName
,但是你作为我迄今为止找到的少数资源之一,却说不要使用“statics”这个词,例如Animals.methodName
,但是在文档中它也显示了。感谢您的指导,我也怀疑这一点。 - blamb