Предположим, у меня есть следующая таблица в csv
.
elementID | groupID | sequence
abc | A | 0
dcv | A | 1
asd | B | 3
ccc | B | 2
abc | B | 4
Я уже создал Element
узлы в Neo4j (sequence
не является атрибутом узлов), имеющий в качестве атрибута ключ elementID
.
Из этого csv
мне нужно создать отношение из каждого Element
узла, принадлежащего группе, к другому элементу, принадлежащему к той же группе, имеющему следующий sequence
номер.
С данными выше мне нужно создать отношение от abc
до dcv
(например, с пометкой A
), от asd
до abc
(с пометкой B
) и от ccc
до asd
снова помечено B
.
Я думал, что запрос так:
LOAD CSV WITH HEADERS FROM "file:///file.csv" AS row
WITH row
MATCH (from:Element {elementID : row.elementID})
MATCH (to:Element {...})
MERGE (from)-[r:row.groupID]->(t)
Проблема в том, что я не знаю, как MATCH
второй узел, так как на графике мне нужен nodeID
, в то время как с текущей переменной row
у меня есть только данные узла from
.
Как я могу это сделать? Есть ли способ использовать вторую переменную, представляющую другую запись в csv
, которая будет использоваться для второй MATCH
?
В этом последнем случае мне нужно указать следующие условия:
WHERE row2.sequence = row.sequence+1 AND row2.groupID = row.groupID