【问题标题】:Neo4J - take results from one of two MATCH queries depending on property valueNeo4J - 根据属性值从两个 MATCH 查询之一中获取结果
【发布时间】:2019-12-04 15:01:30
【问题描述】:

我希望能够根据传入的 ID 的结果执行特定的 MATCH 语句,而忽略其他 MATCH 语句。

假设传递的 ID 是 2。我假设因为它已经运行了第一个查询并且没有匹配任何内容,所以它返回 n2 作为 NULL 并且不会转到第二个 MATCH 语句。我可能错了。我该如何解决我的问题?任何帮助都会很棒。

MATCH (n: nodeA)
OPTIONAL MATCH (n {id = 1})-[r]-(n2)
OPTIONAL MATCH (n {id = 2})--(n2)
WITH n2
RETURN n2

【问题讨论】:

    标签: graph neo4j properties match


    【解决方案1】:

    更新答案...

    OPTIONAL MATCH (n0:nodeA {id: 1})-[r]-(n2)
    WITH collect(n2) AS first_match
    OPTIONAL MATCH (n1:nodeA {id: 2})--(n2)
    RETURN first_match + collect(n2) AS matches
    

    您可以只进行两个可选匹配并返回两个结果集的并集。

    OPTIONAL MATCH (n:nodeA {id: 1})-[r]-(n2)
    RETURN n2
    UNION
    OPTIONAL MATCH (n:nodeA {id: 2})--(n2)
    RETURN n2
    

    【讨论】:

    • 不幸的是,我只能使用一个查询,因此不能有两个 RETURN 语句。
    • 好的。那么当其他查询不匹配时,您无法在实例中处理NULL?
    • 如果两个语句都不匹配一个节点,那么我在其他地方处理它,但是当我注释掉第一个 OPTIONAL MATCH 并运行查询时,实际上返回了我想要从第二个语句中得到的结果.当两个语句都留在查询中时,它必须使用第一条语句的 NULL 结果,并忽略第二条语句,因此不会从数据库返回结果。如果整个查询没有返回一个节点,那很好,但我知道第二个 OPTIONAL MATCH 语句在它自己时会执行,但在包含第一个语句时不会。
    • 您在两场可选比赛中使用了相同的标识符n,因此只有一场比赛可以获胜。现在我提供了另一种可能性,我认为我理解得更好。这里的假设是 id 将只匹配一个或另一个,而不是两者。
    • 您更新的解决方案有效。现在我意识到它似乎很简单,但有时就是这样。谢谢!
    猜你喜欢
    • 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
    相关资源
    最近更新 更多