我有neo4j数据库包含一组节点和关系,节点有属性名称,并且有不同类型的关系。
如果我有一个名单[“A”,“C”,“E”,“Q”,“Z”]列表,我怎样才能找到这些节点之间的所有直接和间接路径?就像A通过一个或多个可能在列表中的节点连接到Z而可能不是。
此cypher查询仅返回直接连接的节点
MATCH (a)-[r]-(b)
WHERE a.name IN ["A","C","E","Q","Z"] AND
b.name IN ["A","C","E","Q","Z"]
RETURN a,b,r
并且此查询返回不相关的节点
MATCH (a)-[r*0..2]-(b)
WHERE a.name IN ["A","C","E","Q","Z"] AND
b.name IN ["A","C","E","Q","Z"]
RETURN a,b,r
答案 0 :(得分:2)
我认为你的意思是:
MATCH (a)-[r*2]-(b) WHERE ...
^ note
0..2
表示"零,一个或两个关系" 。如果您包含0
,则会获得与WHERE
条款匹配的每个节点,如果您包含1
,则只能获得"只有那些直接连接的节点" 。
相反,上面的匹配"恰好是两个" ,即中间有一个其他节点。对于"两个或更多" ,您可以使用2..
。