数组字段中不区分大小写的搜索

赛义德·法萨芬

我想将数组存储到Neo4j db,在了解数组字段类型之前,我将数组存储为逗号分隔的文本字段,并使用正则表达式查找具有特定项的节点!现在,我想将数组另存为数组字段,但是我无法使用“ IN”关键字编写不区分大小写的条件!我的正则表达式可以在cs文本字段中找到:

MATCH (user:USER)-[:MEMBER_OF]->(group:SOME_GROUP) where 
group.resources =~ "(?i)(?:.*,|^)one_resource(?:,.*|$)"
RETURN group

我存储的数据是这样的:

One_Resource,Another_Resource,...

结果是正确的,但我在检索此模型时遇到一些问题,数组字段在检索中更好。

您是否有解决此问题的建议或方法?

这是我对数组字段的密码:

MATCH (node {hid:"abc"}) 
SET node.array_field = ["Foo","Bar","Baz","BaG"]

并找到与此:

MATCH (node) WHERE  "foo" IN node.array_field  RETURN node

但这是区分大小写的:(

谢谢

赛义德·法萨芬

我在书《学习密码》中找到了答案。

必须ANY (...IN...WHERE...)在WHERE子句中使用

MATCH (node)
WHERE ANY ( item IN node.array_field WHERE item =~ "(?i)foo" )
RETURN node

现在可以使用Regex查找所需的节点。

有四个集合谓词。它们如下:

  • ANY:如果集合中至少有一项符合该表达式,则该谓词将返回TRUE
  • ALL:如果集合中的所有项目均符合规则,则该谓词将返回TRUE
  • NONE:如果集合中没有任何项目遵循规则,则该谓词返回TRUE
  • SINGLE:如果恰好有一项符合规则,则该谓词将返回TRUE

如果我们希望所有书籍都标记为NoSQL但不标记为Neo4j,则可以使用NONE谓词,如下所示:

MATCH (b:Book)
WHERE ANY ( tag IN b.tags WHERE tag = 'nosql' )
AND NONE ( tag in b.tags WHERE tag = 'neo4j' )
RETURN b.title,b.tags

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章