Database

[{_id:ObjectId("63920f965d15e98e3d7c450c"),class_number:49,grades:{gpa:90,min:87,curr_class:{percentile:1,score:100}}},{_id:ObjectId("63920f965d15e98e3d7c451c"),class_number:49,grades:{gpa:77,min:81,curr_class:{percentile:56,score:50}}},{_id:ObjectId("63920f965d15e98e3d7c452c"),class_number:49,grades:{gpa:83,min:81,curr_class:{percentile:20,score:80}}},{_id:ObjectId("63920f965d15e98e3d7c453c"),class_number:49,grades:{gpa:92,min:87,curr_class:{percentile:6,score:95}}},{_id:ObjectId("63920f965d15e98e3d7c454c"),class_number:16,grades:{gpa:91,min:87,curr_class:{percentile:3,score:100}}},]

Query

db.collection.aggregate([{$match:{class_number:{$in:[49,50,16]},"grades.curr_class.percentile":{$exists:true},"grades.min":{$gte:80}}},{$set:{groupId:{$concat:[{$toString:"$class_number"},{$toString:{$toBool:{$gte:["$grades.gpa",80]}}}]}}},{$setWindowFields:{partitionBy:"$groupId",sortBy:{"grades.curr_class.score":-1},output:{rank:{$rank:{}}}}},{$match:{rank:{$lte:2}}},{$group:{_id:"$class_number",studentsWithHighGPA:{$push:{$cond:[{$gte:["$grades.gpa",80]},{id:"$_id"},"$$REMOVE"]}},studentsWithoutHighGPA:{$push:{$cond:[{$lt:["$grades.gpa",80]},{id:"$_id"},"$$REMOVE"]}}}}])

Result