在遍历期间在 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]
我对 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]