Neo4j:如何在我的 cypher 语句中实现 apoc.atomic.update?

Neo4j: How can I implement apoc.atomic.update in my cypher statement?

我有一个用于第一次导入的 Cypher 导入和包含以下列的 new_neo_test_1.csv 文件:FromToSender_Sub_FldDateTimeUrlFileHash

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

或者如果有其他建议可以解决我的问题,将不胜感激。

您应该只在非首次导入的 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,因此此查询不需要。