【发布时间】: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以返回1或0,具体取决于已存储的逻辑值或其他一些逻辑评估。您需要注意,由于您的文档当前位于"correctMark"实际上是保存“字符串”而不是数值。如果您尝试将$sum与“字符串”一起使用,则结果将始终为0。因此,您需要优先修复数据。 -
我已经改成数字,现在它给了我计数,但现在我想要尝试的计数,而不是带有主题名称的布尔值的尝试
-
是否可以查看示例数据集,以便我们编写用于聚合的管道?
标签: mongodb aggregation-framework