MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Metodi "statici" di Mongoose e metodi "di istanza".

statics sono le modalità definite nel Modello. methods sono definiti sul documento (istanza).

Potresti usare un statico metodo come Animal.findByName :

const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }

E potresti usare un metodo di istanza come fido.findSimilarTypes :

const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]

Ma non faresti Animals.findSimilarTypes() poiché Animals è un modello, non ha "tipo". findSimilarTypes necessita di un this.type che non esisterebbe nel modello Animals, solo un'istanza del documento conterrebbe quella proprietà, come definita nel modello.

Allo stesso modo non faresti¹ fido.findByName perché findByName dovrebbe cercare in tutti i documenti e fido è solo un documento.

¹Beh, tecnicamente puoi , perché l'istanza ha accesso alla raccolta (this.constructor o this.model('Animal') ) ma non avrebbe senso (almeno in questo caso) avere un metodo di istanza che non utilizza alcuna proprietà dall'istanza. (grazie a @AaronDufour per averlo fatto notare)