如何在Apache AGE中实现嵌套列表内的匹配?
解决Apache AGE嵌套列表属性的匹配问题
你的语法错误源于两个核心问题:
UNWIND是Cypher的独立子句,不能嵌套在WHERE条件中使用- 返回语句中的
nnn未定义,没有对应变量
下面提供两种可行的实现方案:
方法1:双重UNWIND展开嵌套列表
通过两次UNWIND分别拆解外层和内层列表,再筛选目标元素:
SELECT * FROM cypher('list_test', $$ MATCH(name: person) UNWIND(name.nickname) as outer_list UNWIND(outer_list) as inner_item WHERE inner_item = 'thomas' RETURN name, outer_list, inner_item $$) as (person_node agtype, nested_list agtype, matched_item agtype);
操作说明:
- 匹配所有
person类型节点 - 第一次
UNWIND将外层列表拆分为单个内层列表 - 第二次
UNWIND将内层列表拆分为单个元素 - 通过
WHERE筛选出目标元素,返回需要的字段
方法2:使用ANY()谓词函数(无需展开列表)
如果只需判断节点是否包含目标元素,无需展开所有内容,可直接用ANY()函数检查嵌套结构:
SELECT * FROM cypher('list_test', $$ MATCH(name: person) WHERE ANY(outer IN name.nickname WHERE ANY(inner IN outer WHERE inner = 'thomas')) RETURN name $$) as (person_node agtype);
操作说明:
- 外层
ANY()遍历节点的每个内层列表 - 内层
ANY()遍历当前内层列表的每个元素 - 只要存在匹配元素,就返回对应的节点
内容的提问来源于stack exchange,提问作者RU-D
相关产品推荐
相关产品推荐

