Database
db={"students":[{"group":"A","subgroup":"A1","name":"Abby"},{"group":"A","subgroup":"A2","name":"Andy"},{"group":"A","subgroup":"A2","name":"Amber"},{"group":"B","subgroup":"B1","name":"Bart"},]}
Query
db.students.aggregate([{$group:{_id:{group:"$group",subgroup:"$subgroup"},names:{$push:"$name"},count:{$sum:1}}},{"$group":{"_id":"$_id.group","subgroup":{$addToSet:{"_id":"$_id.subgroup","names":"$names",count:"$count"}},count:{$sum:"$count"}}}])