Database

db={"mainTable":[{"_id":"m1","myProperty":"SMS","phoneNumber":"123","email":"email1@example.com"},{"_id":"m2","myProperty":"Email","phoneNumber":"234","email":"email2@example.com"}],"secondTable":[{"_id":"s1","phoneNumber":"123","email":"email1@example.com"},{"_id":"s2","phoneNumber":"234","email":"email2@example.com"}]}

Query

db.mainTable.aggregate([{"$lookup":{"from":"secondTable","let":{"mainProperty":"$myProperty","mainPhoneNumber":"$phoneNumber","mainEmail":"$email"},"pipeline":[{"$addFields":{"matched":{$cond:[{$or:[{$and:[{$eq:["$$mainProperty","SMS"]},{$eq:["$$mainPhoneNumber","$phoneNumber"]}]},{$and:[{$eq:["$$mainProperty","Email"]},{$eq:["$$mainEmail","$email"]}]}]},1,0]}}},{$match:{matched:1}}],"as":"secondTableLookup"}}])

Result