Database

db={"type":[{"_id":1,"offerId":1}],"offer":[{"_id":1,"typeId":1,"productId":1}],"product":[{"_id":1,"subId":"test"}]}

Query

db.type.aggregate([{$lookup:{from:"offer",let:{tid:"$_id"},as:"offer",pipeline:[{$match:{$expr:{$eq:["$$tid","$typeId"]}}},{$lookup:{from:"product",as:"product",let:{pid:"$productId"},pipeline:[{$match:{$and:[{subId:"test"},{$expr:{$eq:["$_id","$$pid"]}}]}}]}},{$match:{product:{$ne:[]}}}]}},{$match:{offer:{$ne:[]}}},{$project:{offer:0}}])

Result