neo4j将关系目标从一个节点更改为另一个节点

时间:2017-05-06 07:29:03

标签: neo4j cypher graph-databases

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

app.post('/auth/register', (req, res) => { ... });

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

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

3 个答案:

答案 0 :(得分:4)

对于没有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

答案 1 :(得分:3)

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

call apoc.refactor.from(rel, newStartNode)

答案 2 :(得分:2)

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。