格林(Gremlin)-如何找到仅经过G的从A到Z的路径

时间:2019-07-01 20:17:41

标签: graph-theory gremlin amazon-neptune

在Gremlin方面需要一些帮助:如果我知道起始顶点和终止顶点,并且起始和终止BUT之间有多个路径,则在此过程中会有几个顶点。如何根据已有的数据找到正确的路径?

例如,在这里我必须找到从“学院”到“雀科”的路径

g.V().has('station','college').
       repeat(out().simplePath())
        .until(has('station','finch'))
        .path().by('station')

结果

==>[college, wellesley, bloor-yonge, rosedale, summerhill, st. clair, davisville, eglinton, lawrence, york mills, sheppard-yonge, north york centre, finch]
==>[college, dundas, queen, king, union, st. andrew, osgoode, st. patrick, queenspark, museum, st. george, bay, bloor-yonge, rosedale, summerhill, st. clair, davisville, eglinton, lawrence, york mills, sheppard-yonge, north york centre, finch]

但是我如何获得通过“ dundas”的正确路径?

2 个答案:

答案 0 :(得分:4)

您可以使用仅当在路径上找到某个元素时才增加路径限制的计数器:

g.withSack(0).V().has('station','college').
  repeat(out().simplePath().
         choose(has('station','dundas'),
                  sack(sum).by(constant(1)))).
    until(has('station','finch')).
  filter(sack().is(1)).
  path().
    by('station')

使用此方法可以轻松添加更多必要的点(例如,经过GHP的过滤器路径)。

但是,如果只有一个顶点是路径的一部分,那么sel-fish的答案是另一个有效的选择(不知道为什么它被否决了)。

答案 1 :(得分:-1)

丹尼尔·库皮兹(Daniel Kuppitz)的回答比我的要好得多。

g.V().has('station','college').
    repeat(out().simplePath()).
        until(has('station','finch')).
    path().
    where(unfold().has('station', 'dundas')).
    unfold().values('station').fold()