0

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

下面是我为演示而设置的实时查询。

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);

我希望得到一些帮助!

4

1 回答 1

3

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

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*]->others”的每个匹配路径都增加了一个新关系作为最后一个关系,因此迭代匹配路径上的所有关系就是迭代每个最后一个关系匹配的路径。所以对于每条匹配的路径,我们将最后一个关系的开始节点和结束节点捕获为“previous”和“last”,然后找到它们之间的关系“r”,根据“Where”子句过滤“r”关系 r 的类型,仅返回那些不属于“depends_on”类型的关系 r。

于 2013-11-08T14:42:45.670 回答