Neo4j量化路径模式带WHERE子句无法匹配多层级节点问题问询
问题原因
你当前写法的核心问题是量化路径内WHERE子句的作用范围:当你把WHERE p.name = 'Atma ram'嵌入量化路径的p:Person节点定义时,这个过滤规则会被强制应用到路径重复的每一段的p节点上。也就是说,每一次路径迭代都要求当前段的p必须是名为'Atma ram'的Person,但只有第一段能满足这个条件——后续段的p本应承接上一段的p1(即Atma Ram的后代),自然无法匹配过滤规则,所以只能返回1层级的结果。
正确写法
写法1(最贴近原查询)
将过滤条件从量化路径内移到全局WHERE子句中,仅对路径的起始p节点做过滤,不影响后续迭代的节点:
MATCH ((p:Person)<-[:IS_MAN_OF]-(m:Marriage)-[:IS_SON_OF]->(p1:Person)){1,} WHERE p.name = 'Atma ram' RETURN p, p1
写法2(可读性更强)
拆分起始节点匹配与路径查询,先定位到目标起始节点,再匹配任意长度的关系链:
MATCH (start:Person) WHERE start.name = 'Atma ram' MATCH ((start)<-[:IS_MAN_OF]-(m:Marriage)-[:IS_SON_OF]->(p1:Person)){1,} RETURN start AS p, p1
这两种写法都能正确返回所有层级的节点组合,比如Atma Ram - Tek Chand及其更深层级的后代节点对。
内容的提问来源于stack exchange,提问作者Hemant Bhargava
相关产品推荐
相关产品推荐

