statics
jsou metody definované na Modelu. methods
jsou definovány v dokumentu (instanci).
Můžete použít statický metoda jako Animal.findByName
:
const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }
A můžete použít instanční metodu jako fido.findSimilarTypes
:
const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
Ale neudělali byste Animals.findSimilarTypes()
protože Animals je model, nemá žádný "typ". findSimilarTypes
potřebuje this.type
která by v modelu Animals neexistovala, pouze instance dokumentu by obsahovala tuto vlastnost, jak je definována v modelu.
Podobně byste neudělali¹ fido.findByName
protože findByName
bude muset prohledat všechny dokumenty a fido
je jen a dokument.
¹No, technicky můžete , protože instance má přístup ke kolekci (this.constructor
nebo this.model('Animal')
), ale nedávalo by smysl (alespoň v tomto případě) mít metodu instance, která nepoužívá žádné vlastnosti z instance. (děkujeme @AaronDufour za upozornění)