gpt4 book ai didi

javascript - Mongoose & 获取集合中的平均评分?

转载 作者:行者123 更新时间:2023-12-03 06:15:27 25 4
gpt4 key购买 nike

我有一个使用 Mongoose 的基于 NodeJS 的应用程序。我想创建一个响应,其中的值是回答问卷的人针对所提出的每个问题提供的平均评分。

我的架构如下所示:

const questionnaireResultSchema = new Schema({      
user: { type: ObjectId, ref: 'User' },
questionnaire: { type: ObjectId, ref: 'Questionnaire' },
rating: [{
id: Number,
question: String,
value: Number
}]
},{
timestamps: true
}).index({user: 1, questionnaire: 1}, {unique: true});

我看过 Mongoose aggregator operator ,但我不确定如何将其应用到我的案例中。伪代码如下所示:

  • 查找 ID 为 xyz 的调查问卷的所有调查结果
  • 提供每个调查问卷结果评分的平均结果

例如,响应如下所示:

[{
id: 1,
question: 'How strongly do you feel about candidate A?',
value: 12 // averaged value
},{
id: 2,
question: 'How strongly do you think we should change the sky color to green?',
value: 31 // averaged value
},{
id: 3,
question: 'How strongly do you think your answers count?',
value: 20 // averaged value
}]

我已经尝试过:

QuestionnaireResultSchema.aggregate([{ 
$match: {
questionnaire: questionnaire
}},
{$project: {
scores: { $avg: '$scores'}
}}
]);

这仅提供 JSON:

[{
"_id": "57bbd4b495407f6145b3ba9f",
"scores": null
}]

集合中的示例文档如下:

 {
user: ObjectId("57bca30536e376c653f439bb")
questionnaire: ObjectId("37bca0feedb0bc470353ab")
scores: [{
id: 1,
question: 'How strongly do you feel about candidate A?',
value: 3
},{
id: 2,
question: 'How strongly do you think we should change the sky color to green?',
value: 4 // averaged value
},{
id: 3,
question: 'How strongly do you think your answers count?',
value: 5 // averaged value
}]
}

虽然我可以自己计算平均值,但如果 Mongoose 提供了该功能,我宁愿利用它。

如有任何帮助,我们将不胜感激。

最佳答案

这应该适用于您的聚合管道:

[
{
$match: {
questionnaire: ObjectId("37bca0feedb0bc470353ab")
}
},
{
$unwind: "$rating"
},
{
$group:{
_id:{
"rating_id": "$rating.id",
"question": "$rating.question",
},
avg_rating: {$avg:"rating.value"}
}
},
{
$project:{
"id": "$_id.rating_id",
"question": "$_id.question",
"avg_rating": "$avg_rating"
}
}
]

尽管您的示例文档有“分数”而不是“评级”,在这种情况下您可以使用:

[
{
$match: {
questionnaire: ObjectId("237bca0feedb0bc470353aba")
}
},
{
$unwind: "$scores"
},
{
$group:{
_id:{
"rating_id": "$scores.id",
"question": "$scores.question",
},
avg_rating: {$avg:"scores.value"}
}
},
{
$project:{
"id": "$_id.rating_id",
"question": "$_id.question",
"avg_rating": "$avg_rating"
}
}
]

此外,您使用的某些 ObjectId 无效。我假设那些只是被打断了。

关于javascript - Mongoose & 获取集合中的平均评分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39127312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com