statics
sont les méthodes définies sur le Modèle. methods
sont définis sur le document (instance).
Vous pouvez utiliser un élément statique méthode comme Animal.findByName
:
const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }
Et vous pouvez utiliser une méthode d'instance comme fido.findSimilarTypes
:
const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
Mais vous ne feriez pas Animals.findSimilarTypes()
parce que Animals est un modèle, il n'a pas de "type". findSimilarTypes
a besoin d'un this.type
qui n'existerait pas dans le modèle Animals, seule une instance de document contiendrait cette propriété, telle que définie dans le modèle.
De même, vous ne feriez pas¹ fido.findByName
car findByName
aurait besoin de chercher dans tous les documents et fido
est juste un document.
¹Eh bien, techniquement, vous pouvez , car l'instance a accès à la collection (this.constructor
ou this.model('Animal')
) mais cela n'aurait aucun sens (du moins dans ce cas) d'avoir une méthode d'instance qui n'utilise aucune propriété de l'instance. (merci à @AaronDufour pour l'avoir signalé)