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()
тъй като Animals е модел, той няма "тип". findSimilarTypes
се нуждае от this.type
което не би съществувало в модела Animals, само екземпляр на документ ще съдържа това свойство, както е дефинирано в модела.
По същия начин не бихте¹ направили fido.findByName
защото findByName
ще трябва да търси във всички документи и fido
е простоа документ.
¹Е, технически вие можете , тъй като екземплярът има достъп до колекцията (this.constructor
или this.model('Animal')
), но не би имало смисъл (поне в този случай) да има метод на екземпляр, който не използва никакви свойства от екземпляра. (благодаря на @AaronDufour, че посочи това)