Database

[{"region":"1","status":"a","sum":100},{"region":"1","status":"b","sum":80},{"region":"2","status":"a","sum":20},{"region":"2","status":"a","sum":30}]

Query

db.collection.aggregate([{$group:{_id:{region:"$region",status:"$status"},statusCount:{$sum:1},sum:{$sum:"$sum"}}},{$group:{_id:"$_id.region",status:{$push:{k:{$concat:["status_",{$toString:"$_id.status"}]},v:"$statusCount"}},sum:{$sum:"$sum"}}},{$replaceRoot:{newRoot:{$mergeObjects:[{$arrayToObject:"$status"},{resion:"$_id",sum:"$sum"}]}}}])

Result