Bạn có thể sử dụng tổng hợp bên dưới.
Nhóm theo cả câu hỏi và câu trả lời để nhận số lượng cho tổ hợp, sau đó nhóm theo câu hỏi để nhận câu trả lời và số lượng của nó.
db.getCollection('testAggregate').aggregate([
{"$group":{
"_id":{"question":"$question","answer":"$answer"},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.question",
"answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
}}
]);
Bạn có thể sử dụng mã bên dưới để có được định dạng bạn muốn trong 3.4.
Thay đổi $group
các khóa thành k và v theo sau là $addFields
với $arrayToObject
để biến đổi mảng thành các cặp giá trị khóa được đặt tên.
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"}}}
]);