如何在Neo4j图查询中匹配属性值中的方括号
问题原因
你的code属性为List<String>(字符串数组)类型,并非普通字符串类型:
- 你在属性预览中看到的
"code": ["DAF AR Index"]里的方括号是JSON序列化时标记数组结构的语法,并不是code属性值本身包含的字符,属性实际存储的是一个长度为1的字符串数组,数组内唯一的元素是DAF AR Index。 CONTAINS关键字、正则匹配符=~都仅作用于字符串类型数据,直接对数组使用这两个操作会直接返回false,因此无法命中目标节点。
解决方案
根据匹配需求选择对应写法即可:
匹配数组内的元素符合规则
如果需要判断数组中任意一个元素满足包含规则/正则规则,使用ANY列表迭代函数实现:
- 匹配code数组中存在元素包含
DAF AR关键词:
MATCH (n:GenericProduct) WHERE ANY(item IN n.code WHERE item CONTAINS 'DAF AR') RETURN n;
- 匹配code数组中存在元素符合正则规则:
MATCH (n:GenericProduct) WHERE ANY(item IN n.code WHERE item =~ 'DAF.*Index') RETURN n;
将整个数组转为字符串后匹配
如果确实需要对数组的序列化结果做匹配,先将数组转为字符串再执行匹配操作:
MATCH (n:GenericProduct) WHERE toString(n.code) CONTAINS '[' RETURN n;
低版本Neo4j内置toString不支持数组转换的话,可安装APOC插件后调用apoc.convert.toString(n.code)实现转换。
内容的提问来源于stack exchange,提问作者Karen
相关产品推荐
相关产品推荐

