Database
db={"modifications":[{"_id":1,"title":"Modification #1","image":"img1.png"},{"_id":2,"title":"Modification #2","image":"img2.png"},{"_id":3,"title":"Modification #3","image":"img3.png"}],"products":[{"slug":"product1","title":"Product #1","variants":[{"size":20,"price":200,"modifications":[{"id":1,"price":10},{"id":2,"price":15}]},{"size":30,"price":250,"modifications":[{"id":1,"price":15},{"id":3,"price":20}]}]}]}
Query
db.products.aggregate([{"$match":{slug:"product1"}},{"$lookup":{"from":"modifications","let":{modIds:{$reduce:{input:"$variants.modifications.id",initialValue:[],in:{$concatArrays:["$$value","$$this"]}}}},"pipeline":[{"$match":{$expr:{$in:["$_id","$$modIds"]}}}],"as":"modifications"}},{$set:{variants:{$map:{input:"$variants",as:"v",in:{$mergeObjects:["$$v",{modifications:{$map:{input:"$$v.modifications",as:"m",in:{$mergeObjects:["$$m",{$first:{$filter:{input:"$modifications",cond:{$eq:["$$this._id","$$m.id"]}}}}]}}}}]}}}}},{$unset:["modifications","variants.modifications.id"]}])