statics是模型上定义的方法。
methods在文档(实例)上定义。
您可能会使用类似以下的 静态 方法
Animal.findByName:
const fido = await Animal.findByName('fido');// fido => { name: 'fido', type: 'dog' }您可能会使用类似以下的实例 方法
fido.findSimilarTypes:
const dogs = await fido.findSimilarTypes();// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]但是您不会这样做,
Animals.findSimilarTypes()因为动物是模型,它没有“类型”。
findSimilarTypes需要
this.type动物模型中不存在的,只有文档实例包含该属性,如模型中所定义。
同样,您不会做¹,
fido.findByName因为您
findByName需要搜索所有文档,
fido而仅仅 是一个 文档。
¹从技术上讲您 可以这样做
,因为实例可以访问集合(
this.constructor或
this.model('Animal')),但是(至少在这种情况下)使用不使用实例中任何属性的实例方法是没有意义的(至少在这种情况下)。(感谢@AaronDufour指出这一点)


