Database

db={"Assignment":[{_id:1,isPublic:true},{_id:2,isPublic:false}],"Solution":[{_id:1,totalTime:2,assignment:1},{_id:2,totalTime:2,assignment:2}]}

Query

db.Solution.aggregate([{$match:{assignment:{$exists:true,$ne:null}}},{$lookup:{from:"Assignment",let:{aId:"$assignment"},pipeline:[{$match:{$expr:{$eq:["$_id","$$aId"]},isPublic:true}}],as:"assignments"}},{$match:{assignments:{$ne:[]}}},{$group:{_id:"$assignment",totalTime:{$sum:"$totalTime"}}},{$sort:{totalTime:-1}}])

Result