Możesz użyć poniższej agregacji.
Grupuj według pytań i odpowiedzi, aby uzyskać liczbę kombinacji, a następnie grupuj po pytaniu, aby uzyskać odpowiedź i jej liczbę.
db.getCollection('testAggregate').aggregate([
{"$group":{
"_id":{"question":"$question","answer":"$answer"},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.question",
"answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
}}
]);
Możesz użyć poniższego kodu, aby uzyskać żądany format w 3.4.
Zmień $group
klucze do k i v, a następnie $addFields
z $arrayToObject
aby przekształcić tablicę w nazwane pary klucz-wartość.
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"}}}
]);