Database

db={"Test":[{_id:1,name:"test1"}],"TestScheduled":[{_id:2,testId:1,batchIds:[1,2]}],Batch:[{_id:1,name:"batch 1"},{_id:2,name:"batch 2"}]}

Query

db.Test.aggregate([{"$lookup":{"from":"TestScheduled","localField":"_id","foreignField":"testId","as":"tests_scheduled"}},{"$unwind":"$tests_scheduled"},{"$lookup":{"from":"Batch","localField":"tests_scheduled.batchIds","foreignField":"_id","as":"tests_scheduled.batches"}},{"$group":{"_id":"$_id","tests_scheduled":{"$push":"$tests_scheduled"}}}])

Result