如何在neo4j中获取所有连接的节点

时间:2017-07-11 10:43:04

标签: neo4j cypher graph-databases

enter image description here

我想得到从节点0开始的所有连接节点的列表,如图

所示

3 个答案:

答案 0 :(得分:12)

根据您的评论:

  

我想获得所有连接节点的列表。例如在   以上情况当我搜索0的连接节点时,它应该返回   节点-1,2,3

此查询将执行您想要的操作:

MATCH ({id : 0})-[*]-(connected)
RETURN connected

上述查询将返回与id=0节点连接的所有节点(我认为节点内的数字是id属性的值)在任何深度,两个方向并考虑任何关系类型。请查看文档的Relationships in depth部分。

虽然这对于小图表可以正常工作,但请注意这是一项非常昂贵的操作。考虑到任何关系类型,它将从起点({id : 0})开始整个图表开始。对于生产环境来说,这确实不是一个好主意。

答案 1 :(得分:4)

如果您希望匹配与另一个节点有关系的节点,可以使用:

MATCH (n) MATCH (n)-[r]-() RETURN n,r

无论关系的方向如何,它都将返回与另一个或多个节点有关系的所有节点。

如果您想添加约束,可以这样做:

MATCH (n:Label {id:"id"}) MATCH (n)-[r]-() RETURN n,r

答案 2 :(得分:4)

对于更大或更重要的互连图,APOC Procedures提供了一种更有效的遍历方法,可以返回子图中的所有节点。

正如其他人已经提到的那样,最好在节点上使用标签,并在标签+属性上添加索引或唯一约束,以便快速查找起始节点。

使用" Label"的标签和idParam的参数,使用APOC获取子图节点的查询将是:

MATCH (n:Label {id:$idParam})
CALL apoc.path.subgraphNodes(n, {minLevel:1}) YIELD node
RETURN node

节点将是不同的,并且起始节点将不会与其余节点一起返回。

修改

目前限制使用minLevel中的subgraphNodes(),您可以自行过滤掉起始节点,也可以使用apoc.path.expandConfig()使用uniqueness:'NODE_GLOBAL'得到同样的效果。