我知道这次被问了几次,但我没有找到关于Tinkerpop(3.1)的最新版本的任何参考,其中包含许多我们可以在遍历中使用的新的有用函数.
假设我必须找到节点3和节点4之间的最短路径.这种遍历是否有声音?
g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().limit(1)
Run Code Online (Sandbox Code Playgroud)
这里我假设当我循环执行BFS搜索时(因此,第一个结果是最短路径),因为这似乎就是loop()函数的情况.
另外,有没有办法在步骤中包含先前绑定的变量(通过使用as步骤)until?更确切地说,我试图在遍历期间选择两个节点,然后找到它们之间的最短路径,例如,
g.V().match(
__as('e0').out('Feedbacks').as('e1'),
__as('e0').repeat(out('Meets')).until(<I reach e1>).path().<get_length>.as('len')
).select('e0', 'e1', 'len')
Run Code Online (Sandbox Code Playgroud)
最后,从前面的遍历中可以看出,我不清楚如何获得最短路径的长度.使用类似的东西
g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().size()
Run Code Online (Sandbox Code Playgroud)
返回结果的大小(返回的行数),而
g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().by(__size())
Run Code Online (Sandbox Code Playgroud)
返回错误.
这是我正在试验的图表,如果有人想要玩一下.
graph = TinkerGraph.open()
e0 = graph.addVertex(T.id, 0, label, "User", "name", "e0")
e1 = graph.addVertex(T.id, 1, label, "User", "name", "e1")
e2 = graph.addVertex(T.id, 2, label, "User", "name", "e2")
e3 = graph.addVertex(T.id, 3, label, "User", "name", "e3")
e4 = graph.addVertex(T.id, 4, label, "User", "name", "e4")
e0.addEdge("Feedbacks", e2)
e0.addEdge("Meets", e1)
e2.addEdge("Feedbacks", e4)
e2.addEdge("Meets", e4) …Run Code Online (Sandbox Code Playgroud) 我有一个多重图,我有兴趣计算连接每对节点的边数;此外,我需要为每对节点获取某个属性的最大值。
不幸的是,在我看来,我们只能使用.group().by(...)一个属性,而我需要按inV和分组outV。在 Cypher 中,我会写一些类似的东西
MATCH (e0: Employee)-[fb: R]-> (e1: Employee)
WITH e0, e1, count(*) AS frequency, min(fb.value) AS min_val
RETURN e0, e1, frequency, min_val
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
干杯!