Database

db={"courses":[{"_id":1,"name":"Course 1","modules":[{"id":1,"name":"Module 1","lessons":[{"id":1,"name":"Lesson 1"},{"id":2,"name":"Lesson 2"}]}]}],"progress":[{"_id":1,"courseId":1,"userId":1,"lessons":[{"id":1,"status":"COMPLETED"}]}]}

Query

db.courses.aggregate([{$match:{"_id":1}},{"$lookup":{"from":"progress","localField":"_id","foreignField":"courseId","pipeline":[{"$match":{"userId":1}}],"as":"progress"}},{$set:{"modules.lessons":{$map:{"input":"$modules.lessons","in":{"id":"$modules.lessons.id","name":"$modules.lessons.name","status":{$arrayElemAt:["$progress.lessons.status",{"$indexOfArray":["$progress.lessons.id","$modules.lessons.id"]}]}}}}}},{"$project":{"name":1,"modules":1}}])

Result