Database

db={sessions:[{_id:ObjectId("5e3c27bf1ef77236945e1212"),status:"WAITING",members:["ID1"]},{_id:ObjectId("5e3c27bf1ef77236945e1213"),status:"WAITING",members:["ID4"]},{_id:ObjectId("5e3c27bf1ef77236945e1214"),status:"ENDED",members:["ID1","ID2"]},{_id:ObjectId("5e3c27bf1ef77236945e1219"),status:"ENDED",members:["ID7","ID2"]}]}

Query

db.sessions.aggregate([{$match:{members:"ID2"}},{$group:{_id:0,data:{$push:"$members"}}},{$set:{joined:{$reduce:{input:"$data",initialValue:[],in:{$setUnion:["$$value","$$this"]}}}}},{$lookup:{from:"sessions",let:{joined:"$joined"},pipeline:[{$match:{$and:[{status:"WAITING"},{$expr:{$not:{$in:[{$first:"$members"},"$$joined"]}}}]}}],as:"res"}},{$project:{res:1,_id:0}}])

Result