我想将数组存储到Neo4j db中,在了解数组字段类型之前,我将数组存储为逗号分隔的文本字段,并使用正则表达式查找具有特定项的节点! 现在我想将数组保存为数组字段,但我不能用" IN"写一个不区分大小写的条件。关键词! 我的正则表达式可以在cs-text字段中找到:
MATCH (user:USER)-[:MEMBER_OF]->(group:SOME_GROUP) where
group.resources =~ "(?i)(?:.*,|^)one_resource(?:,.*|$)"
RETURN group
我存储的数据是这样的:
One_Resource,Another_Resource,...
结果是正确的但我在检索此模型时遇到了一些问题,并且数组字段在检索方面更好。
您有解决此问题的建议或方法吗?
这是我的阵列字段Cypher:
MATCH (node {hid:"abc"})
SET node.array_field = ["Foo","Bar","Baz","BaG"]
找到这个:
MATCH (node) WHERE "foo" IN node.array_field RETURN node
但这是区分大小写的:(
由于
答案 0 :(得分:1)
我在书中找到了答案:Learning Cypher
必须在WHERE子句中使用ANY (...IN...WHERE...)
:
MATCH (node)
WHERE ANY ( item IN node.array_field WHERE item =~ "(?i)foo" )
RETURN node
现在可以使用Regex找到想要的节点。
有四个集合谓词。它们如下:
如果我们希望所有书籍都标记为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