Database

[{username:"Nicolas",fruitiwant:["apple","orange"],bookihave:["banana"]},{username:"Johnny",fruitiwant:["banana","pineapple"],bookihave:["orange"]}]

Query

db.collection.aggregate([{$lookup:{from:"collection",let:{ihave:"$bookihave",iwant:"$fruitiwant",id:"$_id"},pipeline:[{$match:{$expr:{$and:[{$ne:["$_id","$$id"]},{$gt:[{$size:{"$setIntersection":["$$ihave","$fruitiwant"]}},0]},{$gt:[{$size:{"$setIntersection":["$$iwant","$bookihave"]}},0]}]}}},{$project:{username:1,}}],as:"perfect"}},{$unwind:"$perfect"},{$project:{matchedUserNames:{$cond:[{$gt:["$username","$perfect.username"]},["$perfect.username","$username",],["$username","$perfect.username"]]}}},{$group:{_id:"$matchedUserNames"}}])

Result