如何改写Cypher返回语句中的模式理解以避免冗余关系?
解决Cypher模式理解的语法错误问题
你的问题源于旧版本Neo4j的模式理解语法限制:它要求模式必须包含完整路径(节点+关系结构),单纯的节点模式会触发语法报错。以下两种方法可以规避冗余关系的使用:
方法1:提前匹配节点,用collect收集结果(推荐)
把匹配Criterion节点的逻辑移到MATCH子句中,直接用collect构建结果集合,语法更清晰,也没有冗余内容:
// 假设原查询已匹配到childD节点 MATCH (childD:Decision {id: 你的决策ID}) // 提前筛选符合条件的Criterion节点 MATCH (rc:Criterion) WHERE rc.id IN childD.replaceableCriterionIds // 收集结果后继续后续查询逻辑 WITH childD, collect({entity: rc}) AS decisionReplaceableCriteria // 补充原查询的其他返回内容 RETURN childD, decisionReplaceableCriteria
方法2:修改模式理解的模式,添加零长度路径
如果不想调整原有查询结构,可以在模式理解里用零长度路径([*0])占位。它会匹配所有Criterion节点,不会过滤任何数据,但能满足语法对路径结构的要求:
[ (rc:Criterion)-[*0]-(rc) WHERE rc.id IN childD.replaceableCriterionIds | {entity: rc} ] AS decisionReplaceableCriteria
零长度路径表示从节点到自身的空路径,完全不影响查询结果,只是用来凑齐语法要求的路径结构。
内容的提问来源于stack exchange,提问作者alexanoid
相关产品推荐
相关产品推荐

