如何获取路径上节点之间的所有关系

时间:2013-11-08 03:11:46

标签: neo4j cypher

我正在尝试遵循某种关系类型并返回该路径上的所有节点和(其他)关系,但不遵循不属于路径的节点的路径。

以下是我设置演示的实时查询。

http://console.neo4j.org/?id=b6sxoh

在示例中,我不希望通过B-> E-> C的关系包含在结果中,因为它们之间没有“depends_on”关系。

以下是我的多次尝试之一......(也在控制台中)。

START me=node:node_auto_index(name='A')
MATCH p=me-[d:depends_on*]->others 
WITH me,others 
MATCH p=me-[r*]-others 
RETURN DISTINCT relationships(p);

我希望得到一些帮助!

1 个答案:

答案 0 :(得分:3)

这样做的一种方法是迭代匹配路径上的每对节点以获得模式“p = me- [d:depends_on *] - >其他”,并找到它们之间的任何其他关系。

START me=node:node_auto_index(name='A')
MATCH me-[:depends_on*0..]->(previous)-[:depends_on]->last
With previous, last
Match previous-[r]-last
Where type(r) <> 'depends_on'
Return r

由于模式“me- [d:depends_on *] - &gt;其他”的每个匹配路径都以新关系作为最后一个关系进行扩充,因此迭代匹配路径上的所有关系将迭代每个匹配路径上的最后关系。因此,对于每个匹配的路径,我们将最后一个关系的起始节点和结束节点捕获为“previous”和“last”,然后找到它们之间的关系“r”,过滤“r”和“Where”子句基于关系r的类型,只返回那些不属于“depends_on”类型的关系。