Можете да използвате агрегирането по-долу.
Групирайте както по въпрос, така и по отговор, за да получите броя на комбинацията, последвано от група по въпрос, за да получите отговора и неговия брой.
db.getCollection('testAggregate').aggregate([
{"$group":{
"_id":{"question":"$question","answer":"$answer"},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.question",
"answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
}}
]);
Можете да използвате кода по-долу, за да получите желания от вас формат в 3.4.
Променете $group
ключове в k и v, последвани от $addFields
с $arrayToObject
за трансформиране на масива в именувани двойки ключ-стойност.
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"}}}
]);