Database

db={"cruises":[{"cruiseID":"00001","title":"some title","description":"some desc","roomTypes":[{"roomID":"IPD"}]},{"cruiseID":"00002","title":"some other title","description":"some other desc","roomTypes":[{"roomID":"IPD"}]}],"rooms":[{"roomID":"IPD","roomDetails":{"roomType":"some type","title":"some title","description":"desc","maxOccupants":2},"capacity":[{"cruiseID":"00001","available":20},{"cruiseID":"00002","available":10}]}]}

Query

db.cruises.aggregate([{$unwind:"$roomTypes"},{$lookup:{from:"rooms",let:{roomID:"$roomTypes.roomID",cruiseID:"$cruiseID"},pipeline:[{$match:{$expr:{$eq:["$roomID","$$roomID"]}}},{$addFields:{available:{$reduce:{input:"$capacity",initialValue:0,in:{$cond:[{$eq:["$$this.cruiseID","$$cruiseID"]},"$$this.available","$$value"]}}}}},{$project:{capacity:0,_id:0}}],as:"roomTypes"}},{$project:{_id:0}}])

Result