关于Apache AGE中exists()函数Cypher查询语法的疑问
关于Apache AGE中exists()语法的疑问
在图数据库中,可通过
exists(expression)检查属性或路径。参考Apache AGE官方文档中的示例,文档给出的查询语句为:SELECT * FROM cypher('graph_name', $$ MATCH (n) WHERE exists(n)-[]-(name: 'Willem Defoe') RETURN n.full_name $$) as (full_name agtype);但依据
exists(path)的语法规则,我认为正确的查询应给路径添加括号,且属性表达式name: 'Willem Defoe'需置于大括号内,即:SELECT * FROM cypher('graph_name', $$ MATCH (n) WHERE exists((n)-[]-({name: 'Willem Defoe'})) RETURN n.full_name $$) as (full_name agtype);请问我的理解是否正确,还是遗漏了某些要点?
你的理解是完全正确的,Apache AGE遵循Cypher的语法规范,exists()函数用于路径检查时,必须将完整的路径表达式包裹在括号内,同时节点的属性条件需要放在节点的大括号{}中,这是Cypher路径语法的基本要求。
官方文档里的示例大概率是笔误——原语句中的exists(n)-[]-(name: 'Willem Defoe')不符合语法:
- 路径没有被括号包裹,
exists()的参数必须是单个表达式,这种写法会被解析成函数调用后再进行路径匹配,逻辑完全错误; - 节点属性
name: 'Willem Defoe'没有放在大括号里,不符合Cypher中节点属性的定义格式。
你修正后的语句才是符合语法规则的正确写法,能够正确检查是否存在从节点n到名为"Willem Defoe"的节点的任意路径。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

