Gremlin-如何找到从 A 到 Z 仅经过 G 的路径
Gremlin- how to find paths from A to Z that went through G only
在 Gremlin 方面需要一些帮助:如果我知道起始顶点和结束顶点,并且在起始和结束之间有多个路径,但我沿途有几个顶点。如何根据我拥有的数据找到正确的路径?
例如,我必须找到从 'college' 到 'finch'
的路径
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' 的正确路径?
Daniel Kuppitz 的回答比我的好得多。
g.V().has('station','college').
repeat(out().simplePath()).
until(has('station','finch')).
path().
where(unfold().has('station', 'dundas')).
unfold().values('station').fold()
您可以使用一个 path-bound 计数器,只有当您在路径上找到某个元素时才会递增:
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')
使用这种方法很容易添加更多必要的点(例如,通过 G
、H
和 P
的过滤路径)。
但是,如果只有一个顶点必须成为路径的一部分,那么 sel-fish 的答案是另一个有效选项(不知道为什么它被否决)。
在 Gremlin 方面需要一些帮助:如果我知道起始顶点和结束顶点,并且在起始和结束之间有多个路径,但我沿途有几个顶点。如何根据我拥有的数据找到正确的路径?
例如,我必须找到从 'college' 到 'finch'
的路径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' 的正确路径?
Daniel Kuppitz 的回答比我的好得多。
g.V().has('station','college').
repeat(out().simplePath()).
until(has('station','finch')).
path().
where(unfold().has('station', 'dundas')).
unfold().values('station').fold()
您可以使用一个 path-bound 计数器,只有当您在路径上找到某个元素时才会递增:
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')
使用这种方法很容易添加更多必要的点(例如,通过 G
、H
和 P
的过滤路径)。
但是,如果只有一个顶点必须成为路径的一部分,那么 sel-fish 的答案是另一个有效选项(不知道为什么它被否决)。