Cả xếp hạng và Xếp hạng trung bình phải là trường ảo:nếu không, phân chia / 0 sẽ làm hỏng giản đồ của bạn ngay khi bạn có mục nhập trong bộ sưu tập của mình với product.ratings = 0
. Vì vậy, những gì tôi sẽ làm, trước tiên, xác định xếp hạng bằng hàm getter cho một trường ảo:
productSchema.virtual("numberRatings").get(function() {
return this.ratings.length;
});
Giả sử rằng this.ratings
là một mảng lưu trữ tất cả các xếp hạng cho sản phẩm cụ thể này. Bằng cách này, mỗi khi bạn truy cập product.numerRatings
, số lượng mục nhập được cập nhật trong mảng đó sẽ được hiển thị. Lưu ý điều này, bạn chỉ cần thêm một chút logic có điều kiện vào Tỷ lệ trung bình của mình:
productSchema.virtual("averageRating").get(function() {
return this.ratings.length > 0 ? this.totalRating / this.ratings.length : 0;
});
Miễn là không có xếp hạng nào trong mảng, product.averageRating
sẽ tạo ra một số 0, mà không cần thực hiện bất kỳ phép chia có vấn đề nào. Thời điểm mảng đó bắt đầu chứa xếp hạng, giá trị trung bình sẽ được tính.