statics
są metodami zdefiniowanymi w Modelu. methods
są zdefiniowane w dokumencie (instancji).
Możesz użyć statycznego metoda taka jak Animal.findByName
:
const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }
Możesz użyć instancji metody jak fido.findSimilarTypes
:
const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
Ale nie zrobiłbyś Animals.findSimilarTypes()
ponieważ Animals jest modelem, nie ma „typu”. findSimilarTypes
potrzebuje this.type
które nie istniałyby w modelu Animals, tylko instancja dokumentu zawierałaby tę właściwość, zgodnie z definicją w modelu.
Podobnie nie zrobiłbyś¹ ¹ fido.findByName
ponieważ findByName
musiałby przeszukać wszystkie dokumenty i fido
to po prostu a dokument.
¹ Cóż, z technicznego punktu widzenia możesz , ponieważ instancja ma dostęp do kolekcji (this.constructor
lub this.model('Animal')
), ale nie miałoby sensu (przynajmniej w tym przypadku) posiadanie metody instancji, która nie używa żadnych właściwości z instancji. (dzięki @AaronDufourowi za wskazanie tego)