如何在 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
在上面进行了编辑以添加遍历的上限。
我有 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
在上面进行了编辑以添加遍历的上限。