【问题标题】:neo4j change relationship target from one node to anotherneo4j 将关系目标从一个节点更改为另一个节点
【发布时间】:2023-03-21 05:30:01
【问题描述】:

假设我在 neo4j 中有这个模型:

          (n2) -> (n3)-> (n9)
           /\
           |
   (n4)<-(n1)->(n5)->(n6)
    |            |
    \/           \/ 
    (n7)         (n8)

我需要一个密码来将 (n1) 和 (n2) 之间的关系更改为 (n1) 和 (n6),如下所示:

                     (n2) -> (n3)-> (n9)
                      /\
                      |
   (n4)<-(n1)->(n5)->(n6)
    |            |
    \/           \/ 
    (n7)         (n8)

【问题讨论】:

    标签: neo4j cypher graph-databases


    【解决方案1】:

    对于那些没有 APOC 的人,这里是复制关系的方法

    MATCH (n1)-[r1:foo]->(n2),(n6)
    WHERE n1.id = 1 AND n2.id = 2 and n6.id = 6
    CREATE (n2)-[r2:foo]->(n6)
    SET r2=r1
    DELETE r1
    

    【讨论】:

      【解决方案2】:

      如果您安装了APOC Procedures,您可以使用图形重构过程来更改关系的终点。您需要一个匹配查询来获取关系和新的起始节点,然后使用:

      call apoc.refactor.from(rel, newStartNode)
      

      【讨论】:

      • apoc.refactor.to(rel, newEndNode) 也很方便。
      • 请注意,proc 不会修改现有关系,因为这是不可能的。相反,此过程是创建新关系、复制属性和删除旧关系的简写。
      【解决方案3】:

      a StackOverflow question about changing endpoints of a relationship 中所述,Neo4j 无法更改关系的开始或结束节点 - see the Javadoc for Relationship

      但您可以使用 Cypher 查询来执行此操作,该查询将第一个关系的属性复制到使用 the properties() function 的新关系,然后删除第一个关系。

      但是,ID 会在此过程中发生变化,Cypher's SET clause 似乎不允许您手动设置 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
        相关资源
        最近更新 更多