我知道有一个节点类型(a:Source)
,其某些节点[:RefRel]
上的传出边缘类型为(x)
。我想获得(a)
和(x)
之间的所有其他路径,它们之间至少涉及一个节点。
考虑我的图表如下:
查询应返回两个路径:a-b-c-d
和a-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
然后它什么都没回来。 这里有什么不对?
答案 0 :(得分:1)
您创建的所有关系都没有“name”属性。关系有类型,这不是属性。你想用
type(rel) <> "RefRel"
此外,在您的WHERE上,最好使用ALL()而不是FILTER()。