Database

[{"student":"Private Ryan","math":9,"history":8,"literature":6,"science":10}]

Query

db.collection.aggregate([{$addFields:{label:{$let:{vars:{avg:{$divide:[{$sum:["$math","$history","$literature","$science"]},4]}},in:{$cond:[{$gte:["$$avg",8]},"good",{$cond:[{$lt:["$$avg",5]},"bad","average"]}]}}}}},{$group:{_id:"$label",count:{$sum:1},students:{$push:"$$ROOT"}}}])

Result