【问题标题】:Neo4j: Multiple Relationships Merge IssueNeo4j:多个关系合并问题
【发布时间】:2016-02-02 17:12:19
【问题描述】:

我有一个 neo4j 架构,其中有 3 个节点。例如p,b,c

我想写一个这样的合并查询

MERGE (p)-[:has_b]->(b),
MERGE (p)-[:has_c]->(c1),
MERGE (p)-[:has_c]->(c2)

其中 c1 和 c2 是具有不同属性值的 c 节点的实例。

即合并所有三个关系。

如果 3 个合并查询中的任何一个创建了新节点,则所有关系都应使用新创建的 p 节点。

如果我只有两个关系,我可以做到这一点

(c)<-[:has_c]-MERGE (p)-[:has_b]->(b)

对我的情况如何处理 3 个关系有什么建议吗?

仅供参考,我正在使用 py2neo,它根本没有帮助。

【问题讨论】:

    标签: neo4j cypher py2neo


    【解决方案1】:

    节点没有实例。一个节点就是一个节点,它有一个标签。

    您可以先MERGE您的节点以确保它们存在并且所有关系都使用相同的p

    MERGE (p:LabelA {k: "v"})
    MERGE (b:LabelB {k: "v"})
    MERGE (c1:LabelC {k: "v"})
    MERGE (c2:LabelC {k: "v"})
    MERGE (p)-[:has_b]->(b)
    MERGE (p)-[:has_c]->(c1)
    MERGE (p)-[:has_c]->(c2)
    

    这只会创建一次节点和关系。

    【讨论】:

    • 这将获取具有 {k:v} 的 p 节点,它可能具有也可能不具有 has_b/has_c 关系。基本上,我希望 p 节点检查它与 b、c1 和 c2 的关系,如果所有三个关系都存在并且具有相同的属性,则返回旧的 p 节点,并创建一个新节点,即使三个关系中的任何一个是新的(如果end_node 不同,关系名称可以相同)。如果你想让我解释更多,请告诉我。
    • 类似于什么 (c:LabelC {c:'d'}) (b:LabelB {b:'b'}) 提供。但这仅适用于两个房地产。我想要这个功能用于 3 种关系
    • 基本上我想在一个查询中对 3 个关系进行 MERGE 查询
    • 不明白。他们询问我发布了 确实 MERGE 3 个关系。如果存在,它将返回旧的 p 或创建一个新的 p。您在第二条评论中提到的查询没有意义,MERGE 在做什么?
    • 抱歉,第二条评论中的查询应该是 MERGE (c:LabelC {c:'d'})(b:LabelB {b:'b'})
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多