【问题标题】:Neo4j Match on ListsNeo4j 匹配列表
【发布时间】: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 cypher


【解决方案1】:

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

请参阅下面的 MATCH 查询:

MATCH (n)
WHERE ANY (color IN n.stringListProp WHERE color IN ["red", "pink", "cyan"])
RETURN n

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多