statics
sono le modalità definite nel Modello. methods
sono definiti sul documento (istanza).
Potresti usare un statico metodo come Animal.findByName
:
const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }
E potresti usare un metodo di istanza come fido.findSimilarTypes
:
const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
Ma non faresti Animals.findSimilarTypes()
poiché Animals è un modello, non ha "tipo". findSimilarTypes
necessita di un this.type
che non esisterebbe nel modello Animals, solo un'istanza del documento conterrebbe quella proprietà, come definita nel modello.
Allo stesso modo non faresti¹ fido.findByName
perché findByName
dovrebbe cercare in tutti i documenti e fido
è solo un documento.
¹Beh, tecnicamente puoi , perché l'istanza ha accesso alla raccolta (this.constructor
o this.model('Animal')
) ma non avrebbe senso (almeno in questo caso) avere un metodo di istanza che non utilizza alcuna proprietà dall'istanza. (grazie a @AaronDufour per averlo fatto notare)