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

24

enter image description here

我想获取从节点0开始的所有连接节点列表,如图所示。

你能再具体一些吗?你想要什么样的结果? - logisima
我想获取所有连接节点的列表。例如,对于上述情况,当我搜索0的连接节点时,它应该返回节点1、2、3。 - chetan dev
3个回答

17
根据您的评论:
我想获取所有连接节点的列表。例如,在上面的情况下,当我搜索与0相连的节点时,它应返回1、2、3节点。
以下查询将满足您的需求:
MATCH ({id : 0})-[*]-(connected)
RETURN connected

以上查询将返回与具有 id=0 的节点连接的所有节点(假设节点内的数字是一个id属性的值),在任何深度、任何方向和考虑任何关系类型。请参阅文档中的深入关系部分。

尽管对于小图表这样做是可行的,但请注意,这是一项非常昂贵的操作。它将从起点({id : 0})开始考虑任何关系类型并遍历整个图形。这对于生产环境来说真的不是一个好主意。


在循环图中,它会产生重复节点。 - chetan dev
2
@chetandev 请尝试:MATCH (root {id : 0})-[*]-(connected) WHERE root <> connected RETURN distinct connected - Bruno Peres

8
如果您希望匹配与其他节点有关系的节点,则可以使用以下代码:
MATCH (n) MATCH (n)-[r]-() RETURN n,r

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

如果您希望添加约束条件,可以按照以下方式执行:

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

我能做些什么来获取深层节点,而不仅仅是直接连接到n的节点吗? - Ankit Kumar Ojha
匹配(n:Label {id:“id”}) 匹配(q:Deep_Node {id:“id”}) 匹配(n) - [r] -(q)返回n,r,q - Trishant Pahwa

7
对于更大或更复杂的图形,APOC Procedures提供了一种更高效的遍历方式,可以返回子图中的所有节点。
正如其他人已经提到的,最好在节点上使用标签,并在标签+属性上添加索引或唯一约束,以便快速查找起始节点。
使用标签 "Label" 和参数 idParam,使用 APOC 获取子图节点的查询将是:
MATCH (n:Label {id:$idParam})
CALL apoc.path.subgraphNodes(n, {minLevel:1}) YIELD node
RETURN node

节点将是不同的,起始节点将不会与其余节点一起返回。
编辑
目前有个限制阻止在subgraphNodes()中使用minLevel,你可以自己过滤掉起始节点,或者使用apoc.path.expandConfig()并使用uniqueness:'NODE_GLOBAL'来获得相同的效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接