如何让AGE中MATCH...WHERE带属性路径的查询生效?
AGE中WHERE子句模式过滤的替代方案
你提到的这种在WHERE子句里直接使用带属性的关系模式((n)-[:KNOWS]-({name: 'Timothy'}))的写法,目前确实未在AGE中实现,因此会触发语法错误。以下是两种可以达到相同效果的替代方案:
方案一:将模式移至MATCH子句,结合WHERE筛选属性
这是AGE完全支持的标准写法,先匹配目标关系模式,再通过WHERE子句过滤节点属性:
SELECT * FROM cypher('test', $$ MATCH (n:Person)-[:KNOWS]-(m) WHERE m.name = 'Timothy' RETURN n.name, n.age $$) AS (name agtype, age agtype);
逻辑上和你原查询完全一致:先找到所有通过KNOWS关系连接到某个节点的Person节点n,再筛选出被连接节点m的name为Timothy的记录,最终返回n的姓名和年龄。
方案二:使用MATCH...WITH传递中间结果(适用于复杂场景)
如果你的查询涉及多步匹配或复杂逻辑,可以用WITH子句传递中间结果,再做后续筛选:
SELECT * FROM cypher('test', $$ MATCH (m {name: 'Timothy'}) WITH m MATCH (n:Person)-[:KNOWS]-(m) RETURN n.name, n.age $$) AS (name agtype, age agtype);
这种写法先定位到name为Timothy的节点m,再匹配所有和m有KNOWS关系的Person节点n,最终返回目标字段。
内容的提问来源于stack exchange,提问作者Ken W.
相关产品推荐
相关产品推荐

