基于过滤器的猫鼬聚合模型

时间:2020-10-18 14:11:33

标签: javascript node.js mongodb express mongoose

我有一个Review模型,该模型具有字段productrating

我想找到指定产品的所有评分总和,然后将其除以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);

我将如何汇总所有评分并按产品进行过滤以找到总和?

1 个答案:

答案 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 
    }
})