Rating dan averageRating harus berupa bidang virtual:jika tidak, pembagian /0 akan membuat skema mogok saat Anda memiliki entri dalam koleksi dengan product.ratings = 0
. Jadi yang akan saya lakukan adalah, pertama, menentukan peringkat dengan fungsi pengambil untuk bidang virtual:
productSchema.virtual("numberRatings").get(function() {
return this.ratings.length;
});
Dengan asumsi bahwa this.ratings
adalah larik tempat semua peringkat untuk produk tertentu ini disimpan. Dengan cara ini, setiap kali Anda mengakses product.numerRatings
, jumlah entri yang diperbarui dalam larik itu akan ditampilkan. Dengan mengingat hal ini, Anda hanya perlu menambahkan sedikit logika kondisional ke Peringkat rata-rata Anda:
productSchema.virtual("averageRating").get(function() {
return this.ratings.length > 0 ? this.totalRating / this.ratings.length : 0;
});
Selama tidak ada peringkat dalam larik, product.averageRating
akan menghasilkan 0, tanpa mencoba pembagian bermasalah. Saat array mulai berisi peringkat, rata-rata akan dihitung.