
首先,给定一个节点A,首先我们需要找到通过“朋友”边(A,B,C)可以到达的所有节点。所有的蓝色节点)。我可以使用path()-step来实现这一点,如下所示:
g.V().hasLabel("Person").has("name", "A")
.repeat(out("Friend"))
.until(out("Friend").count().is(0))
.path();然后,我们可以从java代码中的path对象中提取垂直点。
但实际上,我们需要找出他们读的是什么书(绿色的)。但是我们不能从gremlin的path()中提取垂直点。
我们能不能在一次穿越中做到这一点?
编辑:事实上,有两种情况:
发布于 2017-05-22 14:27:17
你可以用工会的步骤。
g.V()
.hasLabel("person")
.has("name", "A")
.repeat(union(out("friend"),
out("read")))
.until(out("friend").count().is(0))
.union(path(),
out("read").path())应该给你你需要的东西。有一个定义为
gremlin> :> graph.addVertex(T.label, "person", "name", "A")
==>v[0]
gremlin> :> graph.addVertex(T.label, "person", "name", "B")
==>v[2]
gremlin> :> graph.addVertex(T.label, "person", "name", "C")
==>v[4]
gremlin> :> graph.addVertex(T.label, "person", "name", "D")
==>v[6]
gremlin> :> a = g.V(0).next(); b = g.V(2).next(); a.addEdge("friend", b, "is", "is");
==>e[8][0-friend->2]
gremlin> :> b = g.V(2).next(); c = g.V(4).next(); a.addEdge("friend", b, "is", "is");
==>e[9][2-friend->4]
gremlin> :> a = g.V(0).next(); d = g.V(6).next(); a.addEdge("friend", b, "is", "is");
==>e[10][0-friend->6]
gremlin> :> graph.addVertex(T.label, "book", "name", "Huck Finn")
==>v[11]
gremlin> :> graph.addVertex(T.label, "book", "name", "Tom Sawyer")
==>v[13]
gremlin> :> graph.addVertex(T.label, "book", "name", "A Tale Of Two Cities")
==>v[15]
gremlin> :> a = g.V(0).next(); b = g.V(11).next(); a.addEdge("read", b, "is", "is");
==>e[17][0-read->11]
gremlin> :> a = g.V(2).next(); b = g.V(13).next(); a.addEdge("read", b, "is", "is");
==>e[18][2-read->13]
gremlin> :> a = g.V(4).next(); b = g.V(15).next(); a.addEdge("read", b, "is", "is");
==>e[19][4-read->15]它产生
gremlin> :> g.V().hasLabel("person").has("name", "A").repeat(union(out("friend"), out("read"))).until(out("friend").count().is(0)).union(path(), out("read").path())
==>[v[0], v[6]]
==>[v[0], v[11]]
==>[v[0], v[2], v[4]]
==>[v[0], v[2], v[4], v[15]]
==>[v[0], v[2], v[13]]https://stackoverflow.com/questions/44110074
复制相似问题