因此,在 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 但我真的不确定如何构造这个查询。
如果有人知道该怎么做,可以帮我吗?
根据我的问题的评论,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 属性的任何节点是否具有查询列表中的任何项目。