Neo4j:更新现有节点之间的关系

时间:2018-05-30 21:19:27

标签: neo4j cypher nodes relationship updates

我目前有以下型号:(团队负责人) - [:lead] - >(团队)

众所周知,组织内部发生了变化。今天我们可能会:

(Richard)-[:leads]->(Team_1) 

(Henry)-[:leads]->(Team_2) 

明天:

(Henry)-[:leads]->(Team_1)

(John)-[:leads]->(Team_2) 

(Henry)-[:leads]->(Team_3)

我当前的代码能够加载CSV文件并执行所有这些更改 EXCEPT 以删除Richard和Team_1之间的关系。

我目前的实施情况如下:

LOAD CSV WITH HEADERS FROM "file:///TLsandTeams_1st.csv" AS csvLine
MERGE(tl:TL {name: csvLine.TL})
MERGE(t:Team {name: csvLine.Team})
CREATE UNIQUE (tl)-[:leads]->(t)

这将创建上述第一个场景。然后第二步是:

LOAD CSV WITH HEADERS FROM "file:///TLsandTeams_2nd.csv" AS csvLine
MERGE (tl:TL {name : csvLine.TL})
WITH csvLine, tl
MERGE (t:Team {name : csvLine.Team})
WITH tl,t
OPTIONAL MATCH(tl)-[l:leads]->()
WITH tl,t,l
DELETE l
WITH tl,t
MERGE (tl)-[:leads]->(t);

这甚至适用于团队没有团队负责人并且现在拥有团队负责人的情况,反之亦然。 正如我之前所说,除了删除Richard和Team_1之间的链接外,所有更改都已正确实施。实际上我想更进一步,如果可能的话删除Richard节点。

我正在寻找一种方法,无需删除所有Team Leader节点并重新创建它们。

任何帮助都会非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

不确定但是,如果您的OPTIONAL MATCH适用于团队而不是领导者:

LOAD CSV WITH HEADERS FROM "file:///TLsandTeams_2nd.csv" AS csvLine
MERGE (tl:TL {name : csvLine.TL})
WITH csvLine, tl
MERGE (t:Team {name : csvLine.Team})
WITH tl,t
OPTIONAL MATCH ()-[l:leads]->(t)
WITH tl,t,l
DELETE l
WITH tl,t
MERGE (tl)-[:leads]->(t);