Gremlin 在遍历过程中选择两条可用边
我对Gremlin比较陌生,我所在的公司希望实现一个带有一些临时边缘的图形数据库。每个顶点可以有一条或多条边,并且每条边上都有一个本质上是isTemporary true/false的属性 当遍历图时,如果“isTemporary”=真,我们应该跟随该边,否则我们应该跟随“isTemporary”=假的边 即Gremlin 在遍历过程中选择两条可用边,gremlin,tinkerpop3,Gremlin,Tinkerpop3,我对Gremlin比较陌生,我所在的公司希望实现一个带有一些临时边缘的图形数据库。每个顶点可以有一条或多条边,并且每条边上都有一个本质上是isTemporary true/false的属性 当遍历图时,如果“isTemporary”=真,我们应该跟随该边,否则我们应该跟随“isTemporary”=假的边 即 A-[istemporation:true,值1]->B A-[istemporation:false,值2]>C B-[istemporation:false,值3]>D 在这种情况下,
A-[istemporation:true,值1]->B
A-[istemporation:false,值2]>C
B-[istemporation:false,值3]>D
在这种情况下,运行单个gremlin查询应该返回a->B->D
我已经浏览了TinkerPop3文档,看起来“choose”可能是我想要在这里使用的,但是所有的示例似乎都返回了一个值,当我想要的是一个遍历返回时,我就可以重复执行遍历了
如有任何帮助,我们将不胜感激。您可能正在寻找该步骤 考虑到这张图:
g.addV().as('a').property('name', 'A').
addV().as('b').property('name', 'B').
addV().as('c').property('name', 'C').
addV().as('d').property('name', 'D').
addE('someLink').from('a').to('b').
property('isTemporary', true).property('value', 1).
addE('someLink').from('a').to('c').
property('isTemporary', false).property('value', 2).
addE('someLink').from('b').to('d').
property('isTemporary', false).property('value', 3)
以下查询将返回从A到D的所有路径,尝试通过isTemporary:true
边(如果存在)遍历,或者通过isTemporary:false
边(合并步骤)遍历
g.V().has('name', 'A').
repeat(
coalesce(
outE().has('isTemporary', true).inV(),
outE().has('isTemporary', false).inV()
)
).
until(has('name', 'D')).
path().by('name')
结果:
==>[A,B,D]
谢谢这可能正是我想要的,我很快会在这里测试它。我喜欢把问题想错的时候。我们正在从Cypher迁移,自由地使用unwind来解决这样的问题使得迁移变得棘手。