Database
db={"assets":[{"_id":"1234","name":"Needle","initialStock":10},{"_id":"12345","name":"Serum","initialStock":5},{"_id":"12343","name":"Needle","initialStock":5}],"reserves":[{"_id":"6789","from":ISODate("2019-07-30T07:09:00.000Z"),"to":ISODate("2019-08-30T11:00:00.000Z"),"assets":[{"_id":"1234","assignedStock":10},{"_id":"12345","assignedStock":1}]},{"_id":"6666","from":ISODate("2019-07-30T07:09:00.000Z"),"to":ISODate("2019-08-30T11:00:00.000Z"),"assets":[{"_id":"1234","assignedStock":15},{"_id":"12345","assignedStock":8},{"_id":"1234","assignedStock":7}]}]}
Query
db.reserves.aggregate([{$unwind:{path:"$assets"}},{$group:{_id:"$assets._id",sumAssigned:{$sum:"$assets.assignedStock"},}},{$lookup:{from:"assets",localField:"_id",foreignField:"_id",as:"asset_lookup"}},{$project:{sumAssigned:1,initialStock:{$sum:"$asset_lookup.initialStock"},availableStock:{$subtract:["$sumAssigned",{$sum:"$asset_lookup.initialStock"}]}}}])