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

Umwandlung in Zahl für Wert NaN (Typ Zahl) bei Pfad in einem berechneten Feld Mongoose fehlgeschlagen

Sowohl ratings als auch averageRating sollten virtuelle Felder sein:Andernfalls wird die Division /0 Ihr Schema zum Absturz bringen, sobald Sie einen Eintrag in Ihrer Sammlung mit product.ratings = 0 haben . Was ich also tun würde, ist zunächst, Bewertungen durch eine Getter-Funktion für ein virtuelles Feld zu definieren:

productSchema.virtual("numberRatings").get(function() {
    return this.ratings.length;
});

Angenommen, this.ratings ist ein Array, in dem alle Bewertungen für dieses bestimmte Produkt gespeichert sind. Auf diese Weise jedes Mal, wenn Sie auf product.numerRatings zugreifen , wird die aktualisierte Anzahl von Einträgen in diesem Array angezeigt. Vor diesem Hintergrund müssen Sie nur ein wenig Bedingungslogik zu Ihrer averageRating hinzufügen:

productSchema.virtual("averageRating").get(function() {
    return this.ratings.length > 0 ? this.totalRating / this.ratings.length : 0;
});

Solange keine Bewertungen im Array vorhanden sind, wird product.averageRating ergibt eine 0, ohne eine problematische Division zu versuchen. Sobald dieses Array beginnt, Bewertungen zu enthalten, wird ein Durchschnitt berechnet.