रेटिंग और औसत रेटिंग दोनों ही वर्चुअल फ़ील्ड होनी चाहिए:अन्यथा, /0 डिवीजन आपके स्कीमा को क्रैश कर देगा जब आपके पास अपने संग्रह में product.ratings = 0
के साथ एक प्रविष्टि होगी। . तो मैं क्या करूँगा, सबसे पहले, वर्चुअल फ़ील्ड के लिए गेट्टर फ़ंक्शन द्वारा रेटिंग्स को परिभाषित करें:
productSchema.virtual("numberRatings").get(function() {
return this.ratings.length;
});
मान लें कि this.ratings
एक सरणी है जहां इस विशेष उत्पाद के लिए सभी रेटिंग संग्रहीत की जाती हैं। इस तरह, हर बार जब आप product.numerRatings
. को एक्सेस करते हैं , उस सरणी में प्रविष्टियों की अद्यतन मात्रा प्रदर्शित की जाएगी। इसे ध्यान में रखते हुए, आपको अपनी औसत रेटिंग में बस थोड़ा सा सशर्त तर्क जोड़ने की आवश्यकता है:
productSchema.virtual("averageRating").get(function() {
return this.ratings.length > 0 ? this.totalRating / this.ratings.length : 0;
});
जब तक सरणी में कोई रेटिंग नहीं है, product.averageRating
किसी भी समस्याग्रस्त विभाजन का प्रयास किए बिना, 0 उत्पन्न करेगा। जिस क्षण सरणी में रेटिंग शामिल होने लगती है, एक औसत की गणना की जाएगी।