Neo4j: Как я могу реализовать апо c .atomi c .update в моем выражении шифра? - PullRequest
0 голосов
/ 07 января 2020

У меня есть импорт Cypher для первого импорта и файл new_neo_test_1.csv, который имеет следующие столбцы: From, To, Sender_Sub_Fld, DateTime, Url и FileHash

LOAD CSV WITH HEADERS FROM ("file:///sessions/new_neo_test_1.csv") AS row
MERGE (a:Sender { name: row.From, domain: row.Sender_Sub_Fld, datetime: datetime(row.DateTime) })
MERGE (b:Recipient { name: row.To, datetime: datetime(row.DateTime) })
WITH a,b,row
WHERE row.Url = "false" AND row.FileHash = "false"
CALL apoc.merge.relationship(a, row.Outcome2, {}, {datetime: datetime(row.DateTime)}, b, {}) YIELD rel as rel1
RETURN a,b

Моя цель - использовать что-то вроде следующего для остальной части импорта. Я хотел бы обновить свойство отношений datetime, если узел уже существует. Вид последней увиденной собственности.

Я испробовал варианты apoc.atomic.update, как показано ниже, но, похоже, не могу заставить его работать.

LOAD CSV WITH HEADERS FROM ("file:///sessions/new_neo_test_2.csv") AS row 
MERGE (a:Sender { name: row.From, domain: row.Sender_Sub_Fld, datetime: datetime(row.DateTime) }) 
MERGE (b:Recipient { name: row.To, datetime: datetime(row.DateTime) }) 
WITH a,b,row 
WHERE row.Url = "false" AND row.FileHash = "false" 
CALL apoc.merge.relationship(a, row.Outcome2, {}, {}, b) YIELD rel as rel1 
CALL apoc.atomic.update(rel1, datetime, datetime(row.DateTime)) YIELD datetime as newdatetime 
RETURN a,b

Или, если есть другое предложение для решения моей проблемы, было бы очень признательно .

1 Ответ

2 голосов
/ 08 января 2020

Вы должны использовать только те значения, которые однозначно идентифицируют узел в предложениях MERGE вашего не первого импорта. В противном случае вы можете создать новые узлы. Например, в предложениях MERGE должны отсутствовать свойства datetime (поскольку их значения могут изменяться в зависимости от файлов импорта). После каждого MERGE вы можете использовать SET для обновления datetime.

. Это может работать для вас:

LOAD CSV WITH HEADERS FROM ("file:///sessions/new_neo_test_2.csv") AS row
WITH row, datetime(row.DateTime) AS dt
MERGE (a:Sender {name: row.From, domain: row.Sender_Sub_Fld})
SET a.datetime = dt
MERGE (b:Recipient {name: row.To})
SET b.datetime = dt
WITH a, b, row, dt
WHERE row.Url = "false" AND row.FileHash = "false" 
CALL apoc.merge.relationship(a, row.Outcome2, {}, {}, b) YIELD rel
SET rel.datetime = dt
RETURN a, b

ПРИМЕЧАНИЕ. Нет явной необходимости для использования apoc.atomic.update, поэтому этот запрос не.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...