我目前有以下型号:(团队负责人) - [: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节点并重新创建它们。
任何帮助都会非常感激。谢谢!
答案 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);