TinkerPop 3 Gremlin在遍历期间收集边缘属性

时间:2018-10-31 09:18:10

标签: gremlin tinkerpop tinkerpop3

使用TinkerPop 3 Java API:

我的图看起来像这样:

james {risk: 'n'} --> chris {risk: 'n'} --> raj {risk: 'n'} --> joanne {risk: 'y'}

The edge label is 'travelledWith' and a property called 'pnrLocator'

现在,我想从詹姆士遍历到风险设置为“ y”的顶点。一路上,我想收集顶点和边的属性。

这是我所拥有的,仅适用于顶点属性。如何添加“ by”并也收集“ pnrLocator”?

GraphTraversal<Vertex, ?> values =
                g.traversal()
                        .V()
                        .has("personId", "james")
                        .repeat(out("travelledWith"))
                        .until(has("risk", "y"))
                        .limit(100)
                        .path()
                        .by("personId");


        values.forEachRemaining(v -> System.out.println(v));

1 个答案:

答案 0 :(得分:0)

path()步骤中,将使用“现代” TinkerPop玩具图,按照给定的步骤输出Gremlin遍历的所有元素:

gremlin> g.V().repeat(out()).emit().path().by("name")
==>[marko,lop]
==>[marko,vadas]
==>[marko,josh]
==>[marko,josh,ripple]
==>[marko,josh,lop]
==>[josh,ripple]
==>[josh,lop]
==>[peter,lop]

我遍历了out()并返回了顶点,因此这是我在路径输出中看到的唯一输出。如果我稍微改变遍历以明确遍历边缘(即out()outE().inV()),那么我可以这样做:

gremlin> g.V().repeat(outE().inV()).emit().path().by("name").by('weight')
==>[marko,0.4,lop]
==>[marko,0.5,vadas]
==>[marko,1.0,josh]
==>[marko,1.0,josh,1.0,ripple]
==>[marko,1.0,josh,0.4,lop]
==>[josh,1.0,ripple]
==>[josh,0.4,lop]
==>[peter,0.2,lop]