Gremlin 在遍历过程中选择两条可用边

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 在这种情况下,

我对Gremlin比较陌生,我所在的公司希望实现一个带有一些临时边缘的图形数据库。每个顶点可以有一条或多条边,并且每条边上都有一个本质上是isTemporary true/false的属性

当遍历图时,如果“isTemporary”=真,我们应该跟随该边,否则我们应该跟随“isTemporary”=假的边

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来解决这样的问题使得迁移变得棘手。