Aggregate counting logical values

Home / Uncategorized / Aggregate counting logical values

Question:
Hello friend I am not friendly with mongodb aggregation I want is that I have array of object that contains subjects with its score for each question and I am using node js so I want is that full calculation with mongo query if possible that include subject name with its total score and count of attempt and not attempt my Json Array is as bellow
{
"examId": ObjectId("597367af7d8d3219d88c4341"),
"questionId": ObjectId("597368207d8d3219d88c4342"),
"questionNo": 1,
"subject": "Reasoning Ability",
"yourChoice": "A",
"correctMark": "1",
"attempt": true,
"notAttempt": false,
}

here in object one field is for correct marks subject are different an I want an output like
|Subject Name | Total attempts | total not attempts | total score |
| A | 5 | 3 | 10 |
| B | 10 | 5 | 25 |

I am trying with aggregation but not done yet I have tried this query
db.examscores.aggregate([
{ $group:{
_id:"$examId",
score: { $sum: ‘$correctMark’ },
count: { $sum: 1 }
}}
])

Any one has idea how to achieve this type of output. and if another way to achieve this using node than also good.


Answer:
I have solved this here is my query
[
{ $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 }
}
}

]
Read more

Leave a Reply

Your email address will not be published. Required fields are marked *