【发布时间】:2020-04-09 12:49:33
【问题描述】:
所以在 Neo4j 中,如果您有多个节点并且它们的属性值为 1,如下所示:
n.stringProp = "something"
然后,您可以使用 MATCH 查询(如
)获取符合查询列表中任何属性的各种节点MATCH (n)
WHERE n.stringProp IN ["something", "somethingElse", "etc"]
RETURN n
但是,如果您的节点具有列表属性,如下所示:
n.stringListProp = ["red", "purple", "green"]
并且您想在其列表属性中的查询列表中获取具有任何 1 个或多个标签的节点,那么您不能简单地执行如下查询:
MATCH (n)
WHERE n.stringListProp IN ["red"]
RETURN n
你也不能使用 CONTAINS 因为那是子字符串。所以你不能这样做:
MATCH (n)
WHERE n.stringListProp CONTAINS "red"
RETURN n
而且您不能使用 FOREACH 遍历它们,因为 FOREACH 仅用于 CREATE、MERGE 或 DELETE 操作。所以我认为你必须对这种类型的 MATCH 查询使用 UNWIND,但我真的不确定如何构造这个查询。
如果有人知道怎么做,你能帮帮我吗?
【问题讨论】:
-
提示:尝试使用列表谓词函数之一 - neo4j.com/docs/cypher-manual/4.0/functions/predicate
-
@aldrin 谢谢你,我实际上完全忽略了这些功能。使用 ANY 谓词函数将完全满足我的需要。