在neo4j cypher

时间:2016-12-06 07:50:47

标签: neo4j cypher

我知道有一个节点类型(a:Source),其某些节点[:RefRel]上的传出边缘类型为(x)。我想获得(a)(x)之间的所有其他路径,它们之间至少涉及一个节点。

考虑我的图表如下:

enter image description here

查询应返回两个路径:a-b-c-da-b-c-e。这些路径上的节点和关系可以是任何类型。

使用cypher创建图表:

CREATE (a:Source)-[:RelA]->(b)-[:RelB]->(c)-[:RelC]->(d)
CREATE (c)-[:RelD]->(e)
CREATE (a)-[:RefRel]->(d)
CREATE (a)-[:RefRel]->(e)

我写了如下查询:

MATCH (a:Source)-[:RefRel]-(b)
MATCH path=(a)-[*2..]-(b)      //2.. because that means at least one node on the path
RETURN path

但它返回了整个图表。当我检查行时,由于图中的循环,它返回了很多行。

所以在查询中包含了过滤器,如下所示:

MATCH (a:Source)-[:RefRel]-(b)
MATCH path=(a)-[c*2..]-(b)
WHERE filter(rel IN c WHERE rel.name<>"RefRel")
RETURN path

然后它什么都没回来。 这里有什么不对?

1 个答案:

答案 0 :(得分:1)

您创建的所有关系都没有“name”属性。关系有类型,这不是属性。你想用

type(rel) <> "RefRel"

此外,在您的WHERE上,最好使用ALL()而不是FILTER()。