You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Neo4j中递归查找指定节点的所有父节点直至ROOT节点

Cypher查询:递归查找节点至ROOT根节点的所有父节点

要实现给定节点X,递归向上遍历所有父节点直到找到type属性为ROOT的根节点(父层级最多10层),可以用Cypher的可变长度路径匹配来实现,以下是具体方案:

核心查询模板

MATCH path = (target)-[:PARENT*1..10]->(root)
WHERE target.<标识属性> = '<目标节点值>' AND root.type = 'ROOT'
UNWIND nodes(path)[1..-1] AS parentNode
RETURN DISTINCT parentNode

关键部分说明

  • (target)-[:PARENT*1..10]->(root):匹配从目标节点到ROOT节点的父路径,*1..10限定路径长度为1到10,对应最多10层父节点
  • nodes(path)[1..-1]:提取路径中除目标节点和ROOT节点外的所有父节点,若需要包含ROOT节点,可去掉..-1
  • UNWIND + DISTINCT:处理图中存在环时可能出现的重复父节点

示例验证

示例1:查找标签为TYPE2:X3的节点父节点

假设节点用label和name作为标识,查询语句:

MATCH path = (target:TYPE2 {name: 'X3'})-[:PARENT*1..10]->(root)
WHERE root.type = 'ROOT'
UNWIND nodes(path)[1..-1] AS parentNode
RETURN parentNode.label + ':' + parentNode.name AS parent

返回结果:

parent
-------
TYPE1:T1
TYPE2:X1

示例2:查找TYPE2:X4的节点父节点

查询语句:

MATCH path = (target:TYPE2 {name: 'X4'})-[:PARENT*1..10]->(root)
WHERE root.type = 'ROOT'
UNWIND nodes(path)[1..-1] AS parentNode
RETURN parentNode.label + ':' + parentNode.name AS parent

返回结果:

parent
-------
TYPE1:T1
TYPE2:X1
TYPE2:X2
TYPE1:T2

内容的提问来源于stack exchange,提问作者utkarsh31

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:22:08