Database
db={groups:[{"_id":ObjectId("5a934e000102030405000000"),"title":"a"},{"_id":ObjectId("5a934e000102030405000001"),"title":"b"},{"_id":ObjectId("5a934e000102030405000002"),"title":"c"},{"_id":ObjectId("5a934e000102030405000003"),"title":"d"}],students:[{"_id":ObjectId("5a934e000102030405000010"),"mainGroups":"5a934e000102030405000000",isReserved:true},{"_id":ObjectId("5a934e000102030405000011"),"mainGroups":"5a934e0001020304050000005a934e000102030405000001",isReserved:true},{"_id":ObjectId("5a934e000102030405000012"),"mainGroups":"5a934e000102030405000000",isReserved:false},{"_id":ObjectId("5a934e000102030405000013"),"mainGroups":"5a934e0001020304050000015a934e000102030405000002",isReserved:true},{"_id":ObjectId("5a934e000102030405000014"),"mainGroups":"5a934e000102030405000001",isReserved:false},{"_id":ObjectId("5a934e000102030405000015"),"mainGroups":"5a934e000102030405000002",isReserved:false}]}
Query
db.groups.aggregate([{$lookup:{from:"students",let:{groupId:{$toString:"$_id"}},pipeline:[{$match:{$expr:{$regexMatch:{input:"$mainGroups",regex:{$concat:[".*","$$groupId",".*"]},options:"i"}}}},{$group:{_id:null,count:{$sum:1},isReserved:{$sum:{$cond:["$isReserved",1,0]}}}}],as:"students"}},{$project:{_id:1,title:1,studentCount:{$ifNull:[{$first:"$students.count"},0]},isReserved:{$ifNull:[{$first:"$students.isReserved"},0]}}}])