Database
db={"inf":[{"_id":{"$oid":"662bb5218bd38ee73cd579f0"},"point":12,"code":"bc010","v":[3160,3161,3163,3164],"str":""},{"_id":{"$oid":"662bb5218bd38ee73cd579f1"},"point":12,"code":"bc010","v":[],"str":"*ai"},{"_id":{"$oid":"6665b853417e2f6485f72a6a"},"point":14,"code":"bb050","v":[],"str":""}],"data":[{"_id":{"$oid":"6665b853417e2f6485f72a69"},"q":3161,"point":12,"code":"bc010","str":"","norm":"somedata"},{"_id":{"$oid":"662bb5218bd38ee73cd579f5"},"q":3161,"point":14,"code":"bb050","str":"","norm":"somemoredata"}]}
Query
db.data.aggregate([{"$lookup":{from:"inf",localField:"point",foreignField:"point",let:{q:"$q",str:"$str",code:"$code"},pipeline:[{$match:{$expr:{$and:[{$eq:["$$code","$code"]},{$eq:["$str","$$str"]},{$or:[{$eq:["$v",[]]},{"$in":["$$q","$v"]}]}]}}}],as:"matches"}}])