如何在Neo4j中通过中间节点同时获取A、C、D关联节点?
可以用同一条Cypher查询同时获取A、C、D节点
当然可以,给你两种实用的实现方式:
方式1:一次性匹配多种节点类型
直接在MATCH语句里用竖线|指定要匹配的节点标签,就能同时捕获C和D节点:
MATCH (a:A)--(:B)--(x:C|D) RETURN a, x
执行后,每一行会返回一个A节点,以及它通过B关联到的一个C或D节点,所有关联的节点都会被列出来。
方式2:分组收集关联节点
如果想把每个A对应的所有C、D节点分别整理成列表(避免重复行),可以用OPTIONAL MATCH配合collect函数:
MATCH (a:A)--(b:B) OPTIONAL MATCH (b)--(c:C) OPTIONAL MATCH (b)--(d:D) RETURN a, collect(DISTINCT c) AS c_nodes, collect(DISTINCT d) AS d_nodes
这样结果里每个A节点对应一行,c_nodes是它关联的所有C节点列表,d_nodes是所有D节点列表,就算某个A只关联其中一种节点,对应的列表也会是空而不会报错。
小提示
- 方式1更简洁,适合只需要遍历所有关联节点的场景;
- 方式2适合需要按节点类型分类展示的需求,
DISTINCT是为了防止同一节点被多次收集。
内容的提问来源于stack exchange,提问作者Роман Столяров
相关产品推荐
相关产品推荐

