Database
[{"_id":1,"some_field":"some_value","array":[{"group":"a","subgroup":"aa","value":1},{"group":"b","subgroup":"bb","value":2},{"group":"a","subgroup":"ab","value":2}]}]
Query
db.collection.aggregate(/** Pipeline*/[{$set:{_id:"$_id",some_field:"$some_field",array:{$map:{input:{$setUnion:["$array.group"]},in:{group:"$$this",values:{$map:{input:{$filter:{input:"$array",as:"elem",cond:{$eq:["$$elem.group","$$this"]}}},as:"vals",in:{subgroup:"$$vals.subgroup",value:"$$vals.value"}}}}}}}}])