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([{$lookup:{from:"rooms",localField:"roomTypes.roomID",foreignField:"roomID",as:"roomTypes"}},{$addFields:{roomTypes:{$map:{input:"$roomTypes",in:{$mergeObjects:["$$this",{available:{$reduce:{input:"$$this.capacity",initialValue:0,in:{$cond:[{$eq:["$$this.cruiseID","$cruiseID"]},"$$this.available","$$value"]}}}}]}}}}},{$project:{_id:0,roomTypes:{_id:0},"roomTypes.capacity":0}}])

Result