Database

[{school:"A",question:1,student:1,test:"Summer Test",mark:0},{school:"A",question:2,student:1,test:"Summer Test",mark:1},{school:"A",question:3,student:1,test:"Summer Test",mark:2}]

Query

db.collection.aggregate([{$group:{_id:{school:"$school",test:"$test",student:"$student"},mark:{$sum:"$mark"}}},{$group:{_id:{school:"$_id.school",test:"$_id.test"},students:{$push:{k:{$toString:"$_id.student"},v:"$mark"}}}},{$group:{_id:"$_id.school",tests:{$push:{k:"$_id.test",v:{$arrayToObject:"$students"}}}}},{$project:{_id:0,school:"$_id",tests:{$arrayToObject:"$tests"}}}])

Result