Neo4j技术问询:如何按指定方向组合关系类型查询节点(限20跳)
解决Neo4j路径匹配的关系方向与跳数限制问题
问题分析
你当前的查询将路径拆分为两段独立的可变长度关系,导致两个核心问题:
- 只能先匹配连续的
Use/Realisation关系,再匹配连续的Aggregation关系,无法覆盖三种关系的任意组合场景 - 两段关系的跳数上限相加可能达到40,超出了总跳数不超过20的限制
正确查询语句
MATCH path=(n1:`NodeType1`)-((<-[:`Use`|:`Realisation`])|(-[:`Aggregation`]->))*0..20-(n2:`NodeType2`) WHERE n1 <> n2 RETURN DISTINCT n2, path
语句解释
- 路径模式设计:
((<-[:Use|:Realisation])|(-[:Aggregation]->)):定义单个路径步骤的合法选项,要么是反向的Use/Realisation关系(符合你要求的单一方向),要么是正向的Aggregation关系(符合相反方向的要求)*0..20:允许上述合法步骤重复0到20次,直接限制总跳数不超过20
- 过滤条件:
n1 <> n2:排除跳数为0时起始节点与目标节点重合的情况(若业务场景允许n1=n2可移除该条件)DISTINCT:避免返回重复的n2节点或路径(按需选择)
验证示例
对于你给出的合法路径:
(n1)<-[:Use]-()-[:Aggregation]->()<-[:Use]-()<-[:Realisation]-()-[:Aggregation]->(n2):查询会匹配到这条路径,每一步都符合定义的合法关系方向(n1)-[:Aggregation]->()-[:Aggregation]->()<-[:Use]-(n2):连续正向Aggregation后接反向Use的组合,完全符合路径模式
内容的提问来源于stack exchange,提问作者Sabi Franjo
相关产品推荐
相关产品推荐

