0

我正在使用与此类似的查询:

(n)-[*]->(m)
Any depth.

但我无法在这样的查询中过滤关系名称:

(n)-[*:DOES]->(m)
Any depth.

我需要过滤关系名称,因为相关路径上有不同的关系。如果有帮助,这是我的图表:

CREATE (Computer { name:'Computer' }),(Programming { name:'Programming' }),(Java { name:'Java' }),(GUI { name:'GUI' }),(Button { name:'Button' }), Computer<-[:IS]-Programming, Programming<-[:IS]-Java, Java<-[:IS]-GUI, GUI<-[:IS]-Button, (Ekin { name:'Ekin' }), (Gunes { name:'Gunes' }), (Ilker {name:'Ilker'}), Ekin-[:DOES]->Programming, Ilker-[:DOES]->Java, Ilker-[:DOES]->Button, Gunes-[:DOES]->Java

我想获得与“编程”有任何深度关联的“DOES”关系的名称(Ekin、Ilker 和 Gunes)。

编辑:

我可以通过合并两个不同的查询结果来获得我想要的值(认为 13 是我想要达到的顶部节点):

START n=node(13) 
MATCH p-[:DOES]->()-[*]->(n) 
RETURN DISTINCT p

START n=node(13) 
MATCH p-[:DOES]->(n) 
RETURN DISTINCT p

我想在一个查询中完成。

4

2 回答 2

1

将匹配模式更改为“p-[:DOES]->()-[*0..]->n”,

Match p-[:DOES]->()-[*0..]->n
Return distinct p.name

变长关系“[*]”表示1..*。您需要 0..* 路径上的长度关系。

于 2013-10-01T13:06:03.530 回答
1

只是用 Neo4j 3.0 更新答案。

MATCH p-[:DOES*0..]->(n)
RETURN DISTINCT(p.name)

它返回与接受的答案相同的结果。

于 2016-09-30T13:51:22.093 回答