我有一个Review
模型,该模型具有字段product
和rating
我想找到指定产品的所有评分总和,然后将其除以5得到平均值。
const mongoose = require('mongoose');
const ReviewSchema = mongoose.Schema({
product: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Product',
required: true,
},
rating: {
type: Number,
required: true,
},
});
module.exports = mongoose.model('Review', ReviewSchema);
我将如何汇总所有评分并按产品进行过滤以找到总和?
答案 0 :(得分:1)
我假设您使用的是nodejs,这就是我要做的事情
const ReviewsModel = require('../Models/Review')
router.get('/average',async (req,res)=>{
try {
const reviewsPromise = await ReviewsModel.find({}).populate('product')
if(reviewsPromise[0] == undefined) throw new Error('no reviews')
const reviewsOfSpecifiedProduct= reviewsPromise.filter(rev=> rev.product.id == specifiedProductId)
const sumOfRatings = reviewsOfSpecifiedProduct
.map(rev=>rev.rating)//map to list of only ratings
.reduce((a, b)=> a + b , 0)
const ratingsAverage = sumOfRatings / 5
res.json(ratingsAverage)
} catch (error) {
console.log(error)
//handle the errors here
}
})