Zowel beoordelingen als gemiddelde beoordeling moeten virtuele velden zijn:anders zal de /0-divisie uw schema laten crashen op het moment dat u een item in uw verzameling hebt met product.ratings = 0
. Dus wat ik zou doen, is ten eerste beoordelingen definiëren door een getterfunctie voor een virtueel veld:
productSchema.virtual("numberRatings").get(function() {
return this.ratings.length;
});
Ervan uitgaande dat this.ratings
is een array waarin alle beoordelingen voor dit specifieke product worden opgeslagen. Op deze manier, elke keer dat u product.numerRatings
opent, , wordt het bijgewerkte aantal vermeldingen in die array weergegeven. Met dit in gedachten hoeft u alleen een klein beetje voorwaardelijke logica toe te voegen aan uw gemiddelde beoordeling:
productSchema.virtual("averageRating").get(function() {
return this.ratings.length > 0 ? this.totalRating / this.ratings.length : 0;
});
Zolang er geen beoordelingen in de array zijn, product.averageRating
zal een 0 produceren, zonder een problematische deling te proberen. Op het moment dat die array beoordelingen begint te bevatten, wordt een gemiddelde berekend.