U kunt onderstaande aggregatie gebruiken.
Groepeer op zowel vraag als antwoord om de telling voor combinatie te krijgen, gevolgd door groep voor vraag om het antwoord en het aantal te krijgen.
db.getCollection('testAggregate').aggregate([
{"$group":{
"_id":{"question":"$question","answer":"$answer"},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.question",
"answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
}}
]);
U kunt onderstaande code gebruiken om het gewenste formaat in 3.4 te krijgen.
Wijzig $group
sleutels in k en v gevolgd door $addFields
met $arrayToObject
om de array om te zetten in benoemde sleutelwaardeparen.
db.getCollection('testAggregate').aggregate([
{"$group":{
"_id":{"question":"$question","answer":"$answer"},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.question",
"answers":{"$push":{"k":"$_id.answer","v":"$count"}}
}},
{"$addFields":{"answers":{"$arrayToObject":"$answers"}}}
]);