平均值"/>
通过对唯一ID进行分组来计算5星评级的平均值
[我正在尝试计算用户单击任意数量的星级时传递给数据库的平均5星级。
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ratingSchema = mongoose.Schema({
userId: {
type: Schema.Types.ObjectId,
ref: 'User'
},
productId: {
type: Schema.Types.ObjectId,
ref: 'Product'
},
noOfStars: {
type: Number,
default: 0
}
},{timestamp: true})
const Rating = mongoose.model('Rating', ratingSchema);
module.exports = {Rating}
这是我创建的用于发送特定产品评分的模型。当用户单击星形时,星形值,产品ID和用户ID将插入到数据库中。
import React,{useEffect,useState} from 'react';
const aggregate = require("../models/rating").Rating.aggregate;
const{Rating}=require('../models/rating');
exports.RatingAdd=(req,res) =>{
aggregate(
[
{
$group:
{
_id: "$productId"
}
}
]
)
}
这是我创建的用于检索特定产品的平均星级值并将其显示在前端的控制器。我不明白如何获取相同产品ID的计数,然后将总星数值除以产品ID计数。我无法获得每种产品的正确平均值。我应该如何编辑代码以得出每个产品的平均星级,并将平均星级和产品ID传递给我的前端?
回答如下:db.products.aggregate({$group:{_id:'$productId',count:{$sum:1},avgStar:{$avg:'$noOfStars'}}} )
这是您需要的吗?以下是我使用的虚假数据...请忽略5个以上的评分。
{
"_id" : ObjectId("5ec40a1cce367b3630df8f0b"),
"userId" : "A",
"productId" : "A",
"rating" : 5
}
{
"_id" : ObjectId("5ec40a1fce367b3630df8f0c"),
"userId" : "A",
"productId" : "A",
"rating" : 6
}
{
"_id" : ObjectId("5ec40a21ce367b3630df8f0d"),
"userId" : "A",
"productId" : "A",
"rating" : 7
}
{
"_id" : ObjectId("5ec40a22ce367b3630df8f0e"),
"userId" : "A",
"productId" : "A",
"rating" : 8
}
{
"_id" : ObjectId("5ec40a25ce367b3630df8f0f"),
"userId" : "A",
"productId" : "B",
"rating" : 8
}
{
"_id" : ObjectId("5ec40a2bce367b3630df8f10"),
"userId" : "A",
"productId" : "B",
"rating" : 9
}
{
"_id" : ObjectId("5ec40a2cce367b3630df8f11"),
"userId" : "A",
"productId" : "B",
"rating" : 10
}
{
"_id" : ObjectId("5ec40a30ce367b3630df8f12"),
"userId" : "A",
"productId" : "C",
"rating" : 10
}
结果:
{ "_id" : "C", "count" : 1, "avg" : 10 }
{ "_id" : "A", "count" : 4, "avg" : 6.5 }
{ "_id" : "B", "count" : 3, "avg" : 9 }
更多推荐
通过对唯一ID进行分组来计算5星评级的平均值
发布评论