Puede usar la siguiente agregación.
Agrupe por pregunta y respuesta para obtener el conteo de combinación seguido de grupo por pregunta para obtener la respuesta y su conteo.
db.getCollection('testAggregate').aggregate([
{"$group":{
"_id":{"question":"$question","answer":"$answer"},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.question",
"answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
}}
]);
Puede usar el siguiente código para obtener el formato que desea en 3.4.
Cambiar $group
claves en k y v seguidas de $addFields
con $arrayToObject
para transformar la matriz en pares de valores clave con nombre.
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"}}}
]);