Database

[{_id:"uniquewId",programs:[{progress:"5",addedBy:"coach",exercises:[{date:"1/12/20",exercises:[{exId:"pushup",progress:5},{exId:"situp",progress:5},{exId:"pushup",progress:0}]},{date:"2/12/20",exercises:[{exId:"pushup",progress:5},{exId:"situp",progress:5},{exId:"pushup",progress:0}]}]},{progress:"5",addedBy:"coach2",exercises:[{date:"1/12/20",exercises:[{exId:"pushup",progress:5},{exId:"situp",progress:5},{exId:"pushup",progress:0}]},{date:"2/12/20",exercises:[{exId:"pushup",progress:5},{exId:"situp",progress:5},{exId:"pushup",progress:0}]}]}]}]

Query

db.collection.aggregate([{$project:{_id:1,programs:{$map:{input:{$filter:{input:"$programs",cond:{$eq:["$$this.addedBy","coach"]}}},in:{progress:"$$this.progress",addedBy:"$$this.addedBy",exercises:{$map:{input:"$$this.exercises",in:{date:"$$this.date",exercises:{$filter:{input:"$$this.exercises",as:"e",cond:{$eq:["$$e.exId","pushup"]}}}}}}}}}}}])

Result