【发布时间】:2014-09-16 00:56:04
【问题描述】:
我是 neo4j 的新手,正在尝试将最长的路径映射到已知节点。在此示例中,只有一条直线路径。 (例如,node1 => node2 => node3 => node4 => node5 => node6)。如何编写该查询?
复杂之处在于仅限制关系和特定属性。例如,所有的关系都是类型:KNOWS,但是它上面有一个“信号”属性,我只想为关系 r:KNOWS 运行查询,其中 r.signal = 10。
下面是获取路径中最后两个节点的方法:
MATCH (end)<-[r:knows]-(node)
WHERE r.signal = 10
AND end.name = 4
RETURN node.name, end.name, r.signal
这是我下一次尝试使用 * 来获取所有长度,以及过滤器和提取器的组合来处理集合:
MATCH (end)<-[r:knows*]-(node)
WHERE end.name = 4
WITH end, node, [x IN r WHERE x.signal = 10 | x.signal] as signals
RETURN node.name, end.name, signals
但它仍然不太正确,因为它返回所有迭代,并且只返回对。我想找到最长的路径,并返回所有节点名称的数组(一次不只是一对)。非常感谢任何有关如何解决此问题的指针,或有用的教程链接。我已经完成了 neo4j 在线培训。
【问题讨论】: