Bạn có thể thử tổng hợp bên dưới.
Chuyển đổi đối tượng thành mảng các cặp giá trị khóa, theo sau là $ unwind + $ group để nhóm theo từng khóa và cộng dồn số lượng. Bước cuối cùng để quay lại đối tượng giá trị khóa đã đặt tên.
db.colname.aggregate([
{"$addFields":{"metrics":{"$objectToArray":"$metrics"}}},
{"$unwind":"$metrics"},
{"$group":{
"_id":{"id":"$player_id","key":"$metrics.k"},
"count":{"$sum":"$metrics.v"}
}},
{"$group":{
"_id":"$_id.id",
"metrics":{"$mergeObjects":{"$arrayToObject":[[["$_id.key","$count"]]]}}
}}
])