exists()函数未按预期工作,检查图顶点存在性时报错求助
exists()函数未按预期工作,检查图顶点存在性时报错求助
嘿,我来帮你排查这个问题!看起来你想通过EXISTS(n)来判断值为13的顶点是否存在,但不仅没得到预期的true,还触发了报错,这大概率是因为对Cypher里EXISTS()的用法和MATCH语句的行为理解有点偏差~
先说说核心问题:当你用普通的MATCH语句时,如果没有找到匹配的顶点,整个查询不会返回任何结果行,而不是返回false。另外,在很多图数据库的Cypher实现(包括你用的AgGraph)里,直接用EXISTS(n)来检查节点是否存在的写法并不正确——EXISTS()更多是用来检查节点/关系的属性是否存在,比如EXISTS(n.val)是判断顶点n有没有val这个属性,而非判断n本身是否存在。
给你两个可行的解决方案,都能准确判断顶点是否存在:
方案1:用OPTIONAL MATCH + 非空判断
OPTIONAL MATCH会保证即使没有找到匹配的顶点,也会返回一行结果,然后我们通过判断节点是否为null来确定是否存在:
SELECT * FROM cypher ('test', $$ OPTIONAL MATCH (n {val: 13}) RETURN n IS NOT NULL AS node_exists $$) AS (res agtype);
方案2:用COUNT统计匹配数量
通过统计匹配到的顶点数量,判断是否大于0,这种方式也很直观:
SELECT * FROM cypher ('test', $$ MATCH (n {val: 13}) RETURN COUNT(n) > 0 AS node_exists $$) AS (res agtype);
你可以试试这两种写法,应该就能得到你想要的true或false结果啦~
备注:内容来源于stack exchange,提问作者Muhammad Abdullah
相关产品推荐
相关产品推荐

