Puoi utilizzare l'aggregazione di seguito.
Raggruppa per domanda e risposta per ottenere il conteggio per la combinazione, seguito da raggruppa per domanda per ottenere la risposta e il relativo conteggio.
db.getCollection('testAggregate').aggregate([
{"$group":{
"_id":{"question":"$question","answer":"$answer"},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.question",
"answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
}}
]);
Puoi utilizzare il codice seguente per ottenere il formato desiderato in 3.4.
Cambia $group
chiavi in k e v seguite da $addFields
con $arrayToObject
per trasformare l'array in coppie di valori chiave con nome.
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"}}}
]);