Database
[{"key":1,a:[{p:[{id:4},{id:6}]}]},{"key":2,a:[{p:[{id:2},{id:4},{id:3}]}]},{"key":3,a:[{p:[{id:7},{id:8},{id:9}]}]},{"key":7,a:[{p:[{id:17},{id:18},{id:4}]}]}]
Query
db.collection.aggregate([{$project:{cleanArr:{$reduce:{input:"$a",initialValue:[],in:{$concatArrays:["$$value","$$this.p.id"]}}},key:1,_id:0}},{$lookup:{from:"collection",let:{currentKey:"$key",cleanArr:"$cleanArr"},pipeline:[{$match:{$expr:{$gt:[{$size:{$setIntersection:[{$reduce:{input:"$a",initialValue:[],in:{$concatArrays:["$$value","$$this.p.id"]}}},"$$cleanArr"]}},0]}}},{$match:{$expr:{$ne:["$key","$$currentKey"]}}},{$project:{_id:0,key:1,res:{$setIntersection:[{$reduce:{input:"$a",initialValue:[],in:{$concatArrays:["$$value","$$this.p.id"]}}},"$$cleanArr"]}}}],as:"matching"}},{$match:{"matching.0":{$exists:true}}},{$project:{result:{$reduce:{input:"$matching",initialValue:{id:[],key:["$key"]},in:{id:{$setUnion:["$$value.id","$$this.res"]},key:{$concatArrays:["$$value.key",["$$this.key"]]}}}}}},{$unwind:"$result.id"},{$group:{_id:"$result.id",key:{$first:"$result.key"}}}])