我对Gremlin来说相对较新,而我与之合作的公司正在寻求实现一个图形数据库,其中包含一些临时边缘。每个顶点可以有1个或多个边,每个边都有一个属性,基本上是isTemporary true / false。
当遍历图表时,如果"是临时" = true我们应该遵循这个优势,否则我们应该遵循" isTemporary" = false。
即,
A-[isTemporary:true, value 1] -> B
A-[isTemporary:false, value 2] -> C
B-[isTemporary: false, value 3] -> D
在这种情况下,运行单个gremlin查询应返回A-> B-> D.
我查看过TinkerPop3文档,似乎"选择"可能是我想在这里使用的,但所有的例子似乎都返回一个值,当我想要的是一个遍历回来,所以我可以反复对遍历进行操作。
任何帮助都将不胜感激。
答案 0 :(得分:3)
您可能正在寻找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)
以下查询将返回从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]