statics
são os métodos definidos no Modelo. methods
são definidos no documento (instância). Você pode usar um estático método como
Animal.findByName
:const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }
E você pode usar um método de instância como
fido.findSimilarTypes
:const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
Mas você não faria
Animals.findSimilarTypes()
porque Animals é um modelo, não tem "tipo". findSimilarTypes
precisa de um this.type
que não existiria no modelo Animals, apenas uma instância de documento conteria essa propriedade, conforme definido no modelo. Da mesma forma, você não faria¹
fido.findByName
porque findByName
precisaria pesquisar todos os documentos e fido
é apenas um documento. ¹Bem, tecnicamente você pode , porque a instância tem acesso à coleção (
this.constructor
ou this.model('Animal')
), mas não faria sentido (pelo menos neste caso) ter um método de instância que não use nenhuma propriedade da instância. (obrigado a @AaronDufour por apontar isso)