Neo4j: обновление связей между существующими узлами - PullRequest
0 голосов
/ 31 мая 2018

В настоящее время у меня есть следующая модель: (руководитель группы) - [: ведет] -> (группа)

Как все мы знаем, изменения происходят в организации.Сегодня у нас может быть:

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

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

и завтра:

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

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

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

Мой текущий код способен загружать CSV-файл и делать все эти изменения ИСКЛЮЧИТЬ , чтобы удалитьотношения между Ричардом и 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);

Это работает даже в тех случаях, когда команде не был привязан лидер команды, а теперь она есть, и наоборот.Как я уже говорил, все изменения правильно введены в действие, за исключением удаления связи между Ричардом и Team_1.На самом деле я хотел бы пойти еще дальше и удалить узел Ричарда, если это возможно.

Я искал способ сделать это без необходимости удалять все узлы Team Leader и заново создавать их.

Любая помощь могла бы быть полезна.Спасибо!

1 Ответ

0 голосов
/ 31 мая 2018

Не уверен, но, если ваш ОПЦИОНАЛЬНЫЙ МАТЧ работает на команду вместо лидера:

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);
...