statics
son los métodos definidos en el Modelo. methods
se definen en el documento (instancia).
Puede usar una estática método como Animal.findByName
:
const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }
Y podría usar un método de instancia como fido.findSimilarTypes
:
const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
Pero no harías Animals.findSimilarTypes()
porque Animals es un modelo, no tiene "tipo". findSimilarTypes
necesita un this.type
que no existiría en el modelo Animals, solo una instancia de documento contendría esa propiedad, tal como se define en el modelo.
Del mismo modo, no harías¹ fido.findByName
porque findByName
tendría que buscar en todos los documentos y fido
es solo a documento.
¹Bueno, técnicamente puedes , porque la instancia tiene acceso a la colección (this.constructor
o this.model('Animal')
) pero no tendría sentido (al menos en este caso) tener un método de instancia que no use ninguna propiedad de la instancia. (gracias a @AaronDufour por señalar esto)