Database
db={"studyProgram":[{_id:ObjectId("000000000000000000000111"),name:"Study program 1",description:"Lorem ipsum dolor sit amet",language:"en",subjects:[{id:ObjectId("000000000000000000000222"),optionality:"selective",credits:8,},{id:ObjectId("000000000000000000000333"),optionality:"selective",credits:5},],}],"subject":[{_id:ObjectId("000000000000000000000222"),name:"Subject A",description:"Subject A description.",},{_id:ObjectId("000000000000000000000333"),name:"Subject B",description:"Subject B description.",}]}
Query
db.studyProgram.aggregate([{"$lookup":{"from":"subject","localField":"subjects.id","foreignField":"_id","as":"subjectDocs"}},{"$set":{"subjects":{"$map":{"input":"$subjects","as":"subject","in":{"$mergeObjects":[{"$arrayElemAt":[{"$filter":{"input":"$subjectDocs","as":"doc","cond":{"$eq":["$$doc._id","$$subject.id"]}}},0]},{"optionality":"$$subject.optionality","credits":"$$subject.credits"}]}}},"subjectDocs":"$$REMOVE"}}])