Database

db={bus_routes:[{"_id":1,"src_busStop":"A","dst_busStop":"B","bus":"1"},{"_id":2,"src_busStop":"B","dst_busStop":"A","bus":"2"},{"_id":3,"src_busStop":"A","dst_busStop":"C","bus":"3"},{"_id":4,"src_busStop":"C","dst_busStop":"A","bus":"4"},{"_id":5,"src_busStop":"B","dst_busStop":"C","bus":"5"},{"_id":6,"src_busStop":"C","dst_busStop":"B","bus":"6"},{"_id":7,"src_busStop":"B","dst_busStop":"D","bus":"7"},{"_id":8,"src_busStop":"D","dst_busStop":"B","bus":"8"},{"_id":9,"src_busStop":"C","dst_busStop":"D","bus":"9"},{"_id":10,"src_busStop":"D","dst_busStop":"C","bus":"10"},{"_id":11,"src_busStop":"B","dst_busStop":"E","bus":"11"},{"_id":12,"src_busStop":"E","dst_busStop":"B","bus":"12"},{"_id":13,"src_busStop":"E","dst_busStop":"D","bus":"13"},{"_id":14,"src_busStop":"D","dst_busStop":"E","bus":"14"},{"_id":15,"src_busStop":"C","dst_busStop":"E","bus":"15"},{"_id":16,"src_busStop":"E","dst_busStop":"C","bus":"16"}]}

Query

db.bus_routes.aggregate([{$match:{src_busStop:"A"}},{$addFields:{route:["$$ROOT"]}},{$lookup:{from:"bus_routes",localField:"dst_busStop",foreignField:"src_busStop",as:"firstxfer"}},{$unwind:"$firstxfer"},{$match:{"firstxfer.dst_busStop":{$ne:"A"}}},{$addFields:{firstxfer:{$cond:[{$eq:["D","$firstxfer.src_busStop"]},[],"$firstxfer"]}}},{$lookup:{from:"bus_routes",localField:"firstxfer.dst_busStop",foreignField:"src_busStop",as:"secondxfer"}},{$unwind:"$secondxfer"},{$match:{"secondxfer.dst_busStop":{$ne:"A"}}},{$addFields:{secondxfer:{$cond:[{$eq:["D","$secondxfer.src_busStop"]},[],"$secondxfer"]}}},{$lookup:{from:"bus_routes",localField:"secondxfer.dst_busStop",foreignField:"src_busStop",as:"thirdxfer"}},{$unwind:"$thirdxfer"},{$addFields:{thirdxfer:{$cond:[{$eq:["D","$thirdxfer.src_busStop"]},[],"$thirdxfer"]}}},{$project:{route:["$thirdxfer","$secondxfer","$firstxfer","$route"]}},{$match:{"route.dst_busStop":"D"}},{$project:{route:{$reduce:{input:"$route",initialValue:[],in:{$cond:[{$or:[{$eq:["D","$$this.dst_busStop"]},{$gt:[{$size:"$$value"},0]}]},{$concatArrays:[["$$this"],"$$value"]},"$$value"]}}}}},{$group:{_id:null,route:{$addToSet:"$route"}}},{$unwind:"$route"},{$addFields:{buses:{$size:"$route"}}},{$sort:{buses:1}}])

Result