【问题标题】:How to merge on a relationship between three existing nodes in Cypher?如何合并 Cypher 中三个现有节点之间的关系?
【发布时间】:2018-04-07 18:29:00
【问题描述】:

节点 ABC 已存在。我想合并ABC之间的节点Z。我知道我可以在以下两个节点之间合并: MERGE (A)-[:HAS]->(Z)<-[:SENT]-(B)。但是,我很好奇我如何也可以与C 合并?

                              +-------+
                              |       |
                              |  A    |
                              |       |
                              +---+---+
                                  |
                                  |
                                  |
                                  |
                                  |
                                  | HAS
                                  |
                                  |
                                  |
                                  |
                             +----+-----+
                             |          |
                             |    Z     |
                             |          |
                             |          |
                             +----------+
                             |          |
                             |          |
                             |          |              +-----------+
+----------+                 |          |              |           |
|          |                 |          |              |           |
|          |                 |          |              |           |
|   B      +-----------------+          +--------------+    C      |
|          |        SENT                      RECV'D   |           |
|          |                                           |           |
|          |                                           |           |
+----------+                                           +-----------+

【问题讨论】:

    标签: graph neo4j cypher


    【解决方案1】:

    您可以匹配所有节点并保留标识符,然后重新使用这些标识符。

    MATCH (a:Node {name: 'A'})
    MATCH (b:Node {name: 'B'})
    MATCH (c:Node {name: 'C'})
    MERGE (z:Node {name: 'Z'})
    MERGE (a)-[:HAS]->(z)
    MERGE (b)-[:SENT]->(z)
    MERGE (c)-[:RECEIVED]->(z)
    

    【讨论】:

    • 但请注意,如果其中两个节点之间可能已经存在关系,则您需要分别合并这 3 个关系中的每一个,否则您可能会合并重复关系。例如,如果已经存在 (a)-[:HAS]->(z) 关系,则更长的 MERGE 会在 az 之间创建一个额外的 :HAS 关系。
    猜你喜欢
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多