如何返回间接相互关联的节点

时间:2016-04-22 06:49:14

标签: neo4j cypher

我有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 

1 个答案:

答案 0 :(得分:2)

我认为你的意思是:

MATCH (a)-[r*2]-(b) WHERE ...
             ^ note

0..2表示"零,一个或两个关系" 。如果您包含0,则会获得与WHERE条款匹配的每个节点,如果您包含1,则只能获得"只有那些直接连接的节点"

相反,上面的匹配"恰好是两个" ,即中间有一个其他节点。对于"两个或更多" ,您可以使用2..