【问题标题】:Aggregate counting logical values聚合计数逻辑值
【发布时间】:2017-08-15 05:28:50
【问题描述】:

你好朋友,我对 mongodb 聚合不友好我想要的是我有一个对象数组,其中包含每个问题的分数的主题,我正在使用节点 js,所以我想要的是,如果可能的话,使用 mongo 查询进行完整计算,包括主题名称及其总分和尝试次数,而不是尝试我的 Json 数组如下所示

{
    "examId": ObjectId("597367af7d8d3219d88c4341"),
    "questionId": ObjectId("597368207d8d3219d88c4342"),
    "questionNo": 1,
    "subject": "Reasoning Ability",
    "yourChoice": "A",
    "correctMark": "1",
    "attempt": true,
    "notAttempt": false,
}

在对象中,一个字段用于正确标记主题不同,我想要一个像

的输出
|Subject Name | Total attempts | total not attempts | total score |
| A           | 5              | 3                  | 10          |
| B           | 10             | 5                  | 25          |

我正在尝试聚合但尚未完成我已经尝试过此查询

db.examscores.aggregate([
  { $group:{
    _id:"$examId",
    score: { $sum: '$correctMark' },
    count: { $sum: 1 }
  }}
])

任何人都知道如何实现这种类型的输出。 如果使用节点实现此目的的另一种方法也不错。

【问题讨论】:

  • 您从当前的输出中得到了什么?而您用于$correctMark 的内容可以对$attempt 使用类似的方法,您需要使用$cond$eq
  • 我正在获取总记录数,分数:0 并且 correctMark 是我的字段名称,其中包含用户给出的每个问题的分数
  • 您基本上是在寻找$cond 以返回10,具体取决于已存储的逻辑值或其他一些逻辑评估。您需要注意,由于您的文档当前位于 "correctMark" 实际上是保存“字符串”而不是数值。如果您尝试将$sum 与“字符串”一起使用,则结果将始终为0。因此,您需要优先修复数据。
  • 我已经改成数字,现在它给了我计数,但现在我想要尝试的计数,而不是带有主题名称的布尔值的尝试
  • 是否可以查看示例数据集,以便我们编写用于聚合的管道?

标签: mongodb aggregation-framework


【解决方案1】:

我已经解决了,这是我的查询

[
 { $match: { subject:'Reasoning Ability' } },
 {
   $group:
     {
       _id:{id:"$examId",subject:'$subject'},
       totalAttempt: { $sum:  {$cond : [ "$attempt", 1, 0 ]} },
       totalNotAttempt: { $sum:  {$cond : [ "$notAttempt", 1, 0 ]} },
       markedForReview:{ $sum:  {$cond : [ "$markedForReview", 1, 0 ]} },
       answerAndMarkedForReview:{ $sum:  {$cond : [ "$answerAndMarkedForReview", 1, 0 ]} },
       score: { $sum: '$correctMark' },
       count: { $sum: 1 }
     }
 }

]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多