Neo4j 列表匹配

its*_*des 1 neo4j cypher

因此,在 Neo4j 中,如果您有各种节点,并且它们具有值为 1 的属性,如下所示:

n.stringProp = "something"
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 MATCH 查询来获取符合查询列表中任何属性的各种节点,例如

MATCH (n) 
WHERE n.stringProp IN ["something", "somethingElse", "etc"]
RETURN n
Run Code Online (Sandbox Code Playgroud)

但是,如果您的节点具有列表属性,如下所示:

n.stringListProp = ["red", "purple", "green"]
Run Code Online (Sandbox Code Playgroud)

如果您想要获取在其列表属性中具有查询列表中的任意 1 个或多个标签的节点,那么您不能简单地执行如下查询:

MATCH (n)
WHERE n.stringListProp IN ["red"]
RETURN n
Run Code Online (Sandbox Code Playgroud)

而且您也不能使用 CONTAINS,因为那是针对子字符串的。所以你不能这样做:

MATCH (n)
WHERE n.stringListProp CONTAINS "red"
RETURN n
Run Code Online (Sandbox Code Playgroud)

并且您不能使用 FOREACH 循环它们,因为 FOREACH 仅适用于 CREATE、MERGE 或 DELETE 操作。所以我认为你必须对这种类型的 MATCH 查询使用 UNWIND 但我真的不确定如何构造这个查询。

如果有人知道该怎么做,可以帮我吗?

its*_*des 7

根据我的问题的评论,ANY 谓词函数解决了这个问题。

请参阅下面的 MATCH 查询:

MATCH (n)
WHERE ANY (color IN n.stringListProp WHERE color IN ["red", "pink", "cyan"])
RETURN n
Run Code Online (Sandbox Code Playgroud)

此查询将检查具有 stringListProp 属性的任何节点是否具有查询列表中的任何项目。