2017-08-15 112 views
1

你好朋友我不友好與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   | 

我正在嘗試加agg但尚未完成我已嘗試此查詢

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

任何人都有想法如何實現這種類型的輸出。 如果用另一種方式來實現這個使用節點也比較好。

+0

,您在您目前得到什麼輸出?你用''correctMark'你可以使用'$ attempt'類似的方法,你需要使用'$ cond'和'$ eq' –

+0

我得到的總記錄數爲0,correctMark是我的包含用戶給出的每個問題的分數的字段名稱 – Kalpesh

+0

您基本上正在查找['$ cond'](https://docs.mongodb.com/manual/reference/operator/aggregation/cond/)以返回' 1「或」0「,具體取決於已經存儲的邏輯值,或者其他邏輯評估。你需要注意的是,由於你的文檔當前站在''correctMark''實際上是持有「字符串」而不是數字值。如果你嘗試使用'$ sum'和一個「字符串」,結果將始終爲「0」。所以你需要修復你的數據作爲一個優先事項。 –

回答

0

我已經解決了這個,這裏是我的查詢

[ 
{ $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 } 
    } 
} 

]