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

che*_*dev 15 neo4j graph-databases cypher

在此输入图像描述

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

Bru*_*res 12

根据您的评论:

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

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

MATCH ({id : 0})-[*]-(connected)
RETURN connected
Run Code Online (Sandbox Code Playgroud)

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

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

  • @chetandev尝试:`MATCH (root {id : 0})-[*]-(已连接) WHERE root <>已连接 RETURN 不同已连接` (2认同)

Inv*_*con 6

对于更大或更紧密互连的图,APOC 过程提供了一种更有效的遍历方式,可以返回子图中的所有节点。

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

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

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

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

编辑

目前有一个限制阻止使用minLevelin subgraphNodes(),您可以使用自己过滤掉起始节点,或者使用apoc.path.expandConfig()usinguniqueness:'NODE_GLOBAL'来获得相同的效果。


Tri*_*hwa 5

如果要匹配与另一个节点有关系的节点,则可以使用以下方法:

MATCH (n) MATCH (n)-[r]-() RETURN n,r
Run Code Online (Sandbox Code Playgroud)

它将返回与另一个节点或多个节点有关系的所有节点,而不管关系的方向如何。

如果您希望添加约束,可以通过以下方式进行:

MATCH (n:Label {id:"id"}) MATCH (n)-[r]-() RETURN n,r
Run Code Online (Sandbox Code Playgroud)