Database
db={sessions:[{status:"WAITING",type:"TEXT",members:["adam"]},{status:"WAITING",type:"TEXT",members:["john"]},{status:"WAITING",type:"VOICE",members:["alex"]},{status:"ENDED",type:"VOICE",members:["adam","alex"]},{status:"WAITING",type:"TEXT",members:["bob",]},{status:"TIMEOUT",type:"TEXT",members:["adam","TARGET"]}]}
Query
db.sessions.aggregate([{$match:{status:"WAITING",type:"TEXT","members.0":{$ne:"TARGET"}}},{$lookup:{from:"sessions",let:{member:{$first:"$members"}},pipeline:[{$match:{$expr:{$setIsSubset:[["$$member","TARGET"],"$members"]}}}],as:"found"}},{$match:{"found.0":{$exists:false}}},{$group:{_id:0,members:{$push:{"$arrayElemAt":["$members",0]}},status:{$first:"$status"},type:{$first:"$type"}}}])