MongoDB按分类统计正确答案数量的查询方法求助
按分类统计MongoDB调查结果中正确答案的数量
我来帮你搞定这个统计需求!首先我先假设你的surveyresults集合里的文档结构大概是这样的(毕竟你给的部分数据没显示完整):
{ "_id": "0eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...", "category": "Bee", "isCorrect": true, // 其他比如答题者信息、题目内容之类的字段 }
针对这个结构,用MongoDB的聚合框架可以轻松实现按分类统计正确答案数,我给你两种实用的方案:
方案一:先筛选正确记录再分组统计
这种方式先把所有正确的答题记录过滤出来,再按分类分组计数,逻辑更直观:
db.surveyresults.aggregate([ // 第一步:只保留正确的答题记录 { $match: { isCorrect: true } }, // 第二步:按category字段分组,统计每组的数量 { $group: { _id: "$category", correctCount: { $sum: 1 } } }, // 可选步骤:把结果里的_id重命名为category,让输出更易读 { $project: { category: "$_id", correctCount: 1, _id: 0 } } ])
方案二:直接在分组阶段统计正确数量
如果不想提前过滤,也可以在分组的时候直接判断每条记录是否正确,然后累加计数:
db.surveyresults.aggregate([ { $group: { _id: "$category", correctCount: { $sum: { // 用$cond判断:如果isCorrect为true就加1,否则加0 $cond: { if: { $eq: ["$isCorrect", true] }, then: 1, else: 0 } } } } }, // 同样可选:重命名字段优化输出 { $project: { category: "$_id", correctCount: 1, _id: 0 } } ])
特殊情况调整
如果你的正确答案不是用isCorrect字段标记,而是通过answer和correctAnswer字段是否相等来判断的话,只需要修改判断条件就行:
比如把方案一的$match改成:
$match: { $expr: { $eq: ["$answer", "$correctAnswer"] } }
或者方案二的$cond改成:
$cond: { if: { $eq: ["$answer", "$correctAnswer"] }, then: 1, else: 0 }
这样执行完聚合查询,就能得到类似{"category": "Bee", "correctCount": 10}这样的结果啦!
内容的提问来源于stack exchange,提问作者Nafis
相关产品推荐
相关产品推荐

