在遍历期间在 2 个可用边之间进行选择

Choose between 2 available edges during traversal

我对 Gremlin 比较陌生,我所在的公司正在寻求实现一个图形数据库,其中包含一些临时边缘。每个顶点可以有 1 条或多条边,每条边上都有一个 属性,本质上是 isTemporary true/false.

当遍历图形时,如果 "isTemporary" = true 我们应该沿着那条边,否则我们应该沿着 "isTemporary" = false 的边。

A-[isTemporary:true, value 1] -> B

A-[isTemporary:false, value 2] -> C

B-[isTemporary: false, value 3] -> D

运行 在这种情况下,单个 gremlin 查询应该 return A->B->D。

我查看了 TinkerPop3 文档,似乎 "choose" 可能是我想在这里使用的,但所有示例似乎都是 return 一个值,而我想要的是返回的遍历,以便我可以重复遍历。

如有任何帮助,我们将不胜感激。

您可能正在寻找 coalesce 步骤。

考虑这张图:

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)

以下查询将 return 从 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]