Du kan använda nedanstående aggregering.
Gruppera efter både fråga och svar för att få räkningen för kombination följt av grupp för fråga för att få svaret och dess räkning.
db.getCollection('testAggregate').aggregate([
{"$group":{
"_id":{"question":"$question","answer":"$answer"},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.question",
"answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
}}
]);
Du kan använda nedanstående kod för att få det format du vill ha i 3.4.
Ändra $group
nycklar till k och v följt av $addFields
med $arrayToObject
för att omvandla arrayen till namngivna nyckelvärdespar.
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"}}}
]);