MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose „statische“ Methoden vs. „Instanz“-Methoden

statics sind die im Modell definierten Methoden. methods sind auf dem Dokument (Instanz) definiert.

Sie könnten ein statisches verwenden Methode wie Animal.findByName :

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

Und Sie könnten eine Instanz-Methode verwenden wie fido.findSimilarTypes :

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

Aber Sie würden Animals.findSimilarTypes() nicht ausführen Da Animals ein Modell ist, hat es keinen "Typ". findSimilarTypes benötigt einen this.type die im Animals-Modell nicht vorhanden wäre, würde nur eine Dokumentinstanz diese Eigenschaft enthalten, wie im Modell definiert.

Ebenso würden Sie nicht¹ fido.findByName verwenden weil findByName müssten alle Dokumente und fido durchsuchen ist nur ein dokumentieren.

¹Nun, technisch können Sie , da die Instanz Zugriff auf die Sammlung hat (this.constructor oder this.model('Animal') ), aber es wäre (zumindest in diesem Fall) nicht sinnvoll, eine Instanzmethode zu haben, die keine Eigenschaften der Instanz verwendet. (Danke an @AaronDufour für den Hinweis)