Gremlin 小精灵穿越3
首先,给定一个节点a,首先我们需要找出所有可以通过“朋友”边到达的节点(a、B、C…所有蓝色节点)。我可以通过使用path()-步骤实现这一点,如下所示:Gremlin 小精灵穿越3,gremlin,Gremlin,首先,给定一个节点a,首先我们需要找出所有可以通过“朋友”边到达的节点(a、B、C…所有蓝色节点)。我可以通过使用path()-步骤实现这一点,如下所示: g.V().hasLabel("Person").has("name", "A") .repeat(out("Friend")) .until(out("Friend").count().is(0))
g.V().hasLabel("Person").has("name", "A")
.repeat(out("Friend"))
.until(out("Friend").count().is(0))
.path();
然后我们可以从java代码中的path对象中提取垂直方向
但实际上,我们需要找出他们读的是什么书(绿色的)。但我们无法从gremlin中的path()中提取垂直线
我们有没有办法在一次小精灵穿越中做到这一点
编辑: 事实上,有两种情况:
你可以使用联合步骤
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]]
你可以使用联合步骤
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]]
你期望的输出是什么,只有书?是的,只有书。你期望的输出是什么,只有书?是的,只有书。嗨,潘塔洛妮,有没有办法把书(只有)拿出来?当然有。这里的一切还是关于工会的<代码>g.V().hasLabel(“人”)。有(“姓名”,“A”)。重复(联合(“朋友”),联合(“阅读”)。直到(联合(“朋友”).count().is(0))。联合(“阅读”),hasLabel(“书”)应该工作吗?潘塔洛尼斯,有什么办法可以把书(只)拿出来吗?当然有。这里的一切还是关于工会的
g.V().hasLabel(“person”).has(“name”,“A”)。重复(union(out(“friend”)),out(“read”))。直到(out(“friend”).count()为(0))。union(out(“read”),hasLabel(“book”)
应该有效