MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Méthodes 'statiques' de Mongoose vs méthodes 'd'instance'

statics sont les méthodes définies sur le Modèle. methods sont définis sur le document (instance).

Vous pouvez utiliser un élément statique méthode comme Animal.findByName :

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

Et vous pouvez utiliser une méthode d'instance comme fido.findSimilarTypes :

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

Mais vous ne feriez pas Animals.findSimilarTypes() parce que Animals est un modèle, il n'a pas de "type". findSimilarTypes a besoin d'un this.type qui n'existerait pas dans le modèle Animals, seule une instance de document contiendrait cette propriété, telle que définie dans le modèle.

De même, vous ne feriez pas¹ fido.findByName car findByName aurait besoin de chercher dans tous les documents et fido est juste un document.

¹Eh bien, techniquement, vous pouvez , car l'instance a accès à la collection (this.constructor ou this.model('Animal') ) mais cela n'aurait aucun sens (du moins dans ce cas) d'avoir une méthode d'instance qui n'utilise aucune propriété de l'instance. (merci à @AaronDufour pour l'avoir signalé)