Sie können die folgende Aggregation verwenden.
Gruppieren Sie nach Frage und Antwort, um die Anzahl der Kombinationen zu erhalten, gefolgt von Gruppieren nach Frage, um die Antwort und deren Anzahl zu erhalten.
db.getCollection('testAggregate').aggregate([
{"$group":{
"_id":{"question":"$question","answer":"$answer"},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.question",
"answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
}}
]);
Sie können den folgenden Code verwenden, um das gewünschte Format in 3.4 zu erhalten.
Ändern Sie $group
Schlüssel in k und v gefolgt von $addFields
mit $arrayToObject
um das Array in benannte Schlüsselwertpaare umzuwandeln.
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"}}}
]);