如何在 neo4j 中从起始节点获取所有可达节点(以及它们之间的可选所有关系?)

how to get all reachable nodes from a starting node (and optionally all relationships between them?) in neo4j

我有 5 个节点,1,2,3,4,5
5个节点的关系如下,

1-->2
2-->3
1-->3
2-->4
3-->5
4-->5

在线模型http://console.neo4j.org/r/8h0c91
使用下面的密码查询获取一级连接节点

match (n:Person{name:"1"})-[r]-(m:Person) return n,m,r

结果:

n                        r                          m
(20:Person {name:"1"})  []  (20:Person {name:"1"})
(20:Person {name:"1"})  [(20)-[21:Follow]->(22)]    (22:Person {name:"3"})
(20:Person {name:"1"})  [(20)-[20:Follow]->(21)]    (21:Person {name:"2"})

只能得到1-->2和1-->3的关系,不能得到2-->3。
使用下面的密码查询 y 获取第二级连接节点。

match (n:Person{name:"1"})-[r:Follow*0..2]-(m:Person) return n,m,r

结果:

n   m   r
(0:Person {name:"1"})   (0:Person {name:"1"})   []
(0:Person {name:"1"})   (1:Person {name:"2"})   [(0)-[0:Follow]->(1)]
(0:Person {name:"1"})   (2:Person {name:"3"})   [(0)-[0:Follow]->(1), (1)-[2:Follow]->(2)]
(0:Person {name:"1"})   (3:Person {name:"4"})   [(0)-[0:Follow]->(1), (1)-[3:Follow]->(3)]
(0:Person {name:"1"})   (2:Person {name:"3"})   [(0)-[1:Follow]->(2)]
(0:Person {name:"1"})   (1:Person {name:"2"})   [(0)-[1:Follow]->(2), (1)-[2:Follow]->(2)]
(0:Person {name:"1"})   (4:Person {name:"5"})   [(0)-[1:Follow]->(2), (2)-[4:Follow]->(4)]

我无法得到4-->5和2-->3的关系
我的问题是如何获取所有节点以及所有 neo4j 节点之间的关系。

您可以只排除 name 匹配并添加关系的方向,这将 return 所有三个。

MATCH (n:Person)-[r]->(m:Person) 
RETURN n,m,r

根据您的评论,您正在寻找 'all reachable nodes from a starting node (and optionally all relationships between them)'

在这种情况下,path expander procedures in APOC Procedures应该有你想要的:

MATCH (n:Person{name:"1"})
CALL apoc.path.subgraphAll(n, {maxLevel:2}) YIELD nodes, relationships
RETURN nodes, relationships

在上面进行了编辑以添加遍历的上限。