我正在使用与此类似的查询:
(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
我想在一个查询中执行此操作。
答案 0 :(得分:1)
将匹配模式更改为“p - [:DOES] - &gt;() - [* 0 ..] - &gt; n”,
Match p-[:DOES]->()-[*0..]->n
Return distinct p.name
可变长度关系“[*]”表示1 .. *。路径上需要0 .. *长度关系。
答案 1 :(得分:1)
只是用Neo4j 3.0更新答案。
MATCH p-[:DOES*0..]->(n)
RETURN DISTINCT(p.name)
它返回与接受的答案相同的结果。