MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Métodos 'estáticos' do Mongoose vs. métodos de 'instância'


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)