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

Mongoose 'statiske' metoder vs. 'instans' metoder

statics er metoderne defineret på modellen. methods er defineret på dokumentet (instansen).

Du kan bruge en statisk metode som Animal.findByName :

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

Og du kan bruge en forekomstmetode som fido.findSimilarTypes :

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

Men du ville ikke gøre Animals.findSimilarTypes() fordi Animals er en model, har den ingen "type". findSimilarTypes har brug for en this.type som ikke ville eksistere i dyremodellen, ville kun en dokumentinstans indeholde den egenskab, som defineret i modellen.

På samme måde ville du ikke¹ gøre fido.findByName fordi findByName skulle søge gennem alle dokumenter og fido er bare a dokument.

¹Tja, teknisk set kan det , fordi instans har adgang til samlingen (this.constructor eller this.model('Animal') ), men det ville ikke give mening (i hvert fald i dette tilfælde) at have en instansmetode, der ikke bruger nogen egenskaber fra instansen. (tak til @AaronDufour for at påpege dette)



  1. Mongoose-opdatering uden tilbagekald

  2. Hvordan håndterer man tidszoneproblemet, når man gemmer datoer i utc ved hjælp af mongod?

  3. Mongodb - Mongoimport fejl ugyldigt tegn

  4. MongoDB på AWS:Hvordan vælger man den rigtige EC2-instanstype til din MongoDB-server?