You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:54:25