Database
db={"collection":[{_id:"backpack",slots:[{slot:"left-pocket",contents:[{item:"pen",count:3},{item:"pencil",count:2},]},{slot:"right-pocket",contents:[{item:"bottle",count:1},{item:"eraser",count:1},]}]}],"items":[{_id:"pen",color:"red"},{_id:"pencil",number:2},{_id:"eraser",type:"rubber"},{_id:"bottle",capacity:"2 liter"}]}
Query
db.collection.aggregate([{$unwind:"$slots"},{$unwind:"$slots.contents"},{$lookup:{from:"items",localField:"slots.contents.item",foreignField:"_id",as:"convertedItems"}},{$group:{_id:"$slots.slot",root:{$first:"$$ROOT"},items:{$push:{$mergeObjects:["$slots.contents",{$arrayElemAt:["$convertedItems",0]}]}},}},{$addFields:{"root.slots.contents":"$items"}},{$replaceRoot:{newRoot:"$root"}},{$group:{_id:"$_id",root:{$first:"$$ROOT"},slots:{$push:"$slots"}}},{$addFields:{"root.slots":"$slots"}},{$replaceRoot:{newRoot:"$root"}},{$project:{convertedItems:0}}])