statics
är de metoder som definieras i modellen. methods
definieras på dokumentet (instansen).
Du kan använda en statisk metod som Animal.findByName
:
const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }
Och du kan använda en instans metod som fido.findSimilarTypes
:
const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
Men du skulle inte göra Animals.findSimilarTypes()
eftersom Animals är en modell har den ingen "typ". findSimilarTypes
behöver en this.type
som inte skulle existera i djurmodellen, bara en dokumentinstans skulle innehålla den egenskapen, enligt definitionen i modellen.
På samma sätt skulle du inte¹ göra fido.findByName
eftersom findByName
skulle behöva söka igenom alla dokument och fido
är bara a dokumentera.
¹Tja, tekniskt sett kan det , eftersom instansen har tillgång till samlingen (this.constructor
eller this.model('Animal')
) men det skulle inte vara meningsfullt (åtminstone i det här fallet) att ha en instansmetod som inte använder några egenskaper från instansen. (tack till @AaronDufour för att du påpekade detta)