sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose 'statiska' metoder kontra 'instans' metoder

statics är de metoder som definieras i modellen. methods definieras på dokumentet (instansen).

Du kan använda en statisk metod som Animal.findByName :

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

Och du kan använda en instans metod som fido.findSimilarTypes :

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

Men du skulle inte göra Animals.findSimilarTypes() eftersom Animals är en modell har den ingen "typ". findSimilarTypes behöver en this.type som inte skulle existera i djurmodellen, bara en dokumentinstans skulle innehålla den egenskapen, enligt definitionen i modellen.

På samma sätt skulle du inte¹ göra fido.findByName eftersom findByName skulle behöva söka igenom alla dokument och fido är bara a dokumentera.

¹Tja, tekniskt sett kan det , eftersom instansen har tillgång till samlingen (this.constructor eller this.model('Animal') ) men det skulle inte vara meningsfullt (åtminstone i det här fallet) att ha en instansmetod som inte använder några egenskaper från instansen. (tack till @AaronDufour för att du påpekade detta)



  1. 4 sätt att ta bort ett dokument i MongoDB

  2. Docker [Errnr 111] Anslut samtal misslyckades ('127.0.0.1', 6379)

  3. Hur uppdaterar du objekt i ett dokuments array (kapslade uppdatering)

  4. Spara användarsession i Redis med ASP.NET Core i Azure