db.route.insert({"origin": "a","destination": "b"})
db.route.insert({"origin": "b", "destination": "c"})
db.route.insert({"origin": "c", "destination": "d"})
db.route.insert({"origin": "d", "destination": "e"})
db.route.insert({"origin": "e", "destination": "f"})
db.route.insert({"origin": "f", "destination": "g"})
db.route.insert({"origin": "g","destination": "h"})
db.route.insert({"origin": "h","destination": "i"})
db.route.insert({"origin": "a", "destination": "e"})
db.route.aggregate( [
{ $match: { origin: { $eq: "a" } } },
{
$graphLookup: {
from: "route",
startWith: "$destination",
connectFromField: "destination",
connectToField: "origin",
depthField: "numConnections",
as: "traverseroute",
restrictSearchWithMatch:{"destination":{"$ne":"h"}}
}
}, { $sort: { 'traverseroute.numConnections': 1 }},
{ $project: {"_id":0, "origin":1, "traverseroute.origin":1}}
])