Neo4j的CSV导入 - 创建或更新

问题描述:

我有以下查询创建人节点 -Neo4j的CSV导入 - 创建或更新

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "http://192.168.11.121/movie-reco-db/person_node.csv" as row 
CREATE (:Person {personId: row.person_id, name: row.name}); 

我设置索引上PERSONIDperson_node.csv是我从MySql数据库中导出的文件,这个查询工作正常,但问题是CSV文件将在每次我导出时有新的记录,如果我再次运行此查询,那么它正在创建重复节点,如果我设置UNIQUE索引上personId那么它说 -

Node 0 already exists with label Person and property "personId"=[1] 

并且不插入新记录。那么是否有任何优雅的方式来更新记录(如果已经存在)或者创建新记录(如果没有)

您正在寻找MERGE操作,该操作会尝试匹配,如果找不到它,它将创建它。请注意,如果您正在合并的东西不存在(例如,将节点与personId和名称合并,但现有节点具有该personId但名称略有不同),则会创建该节点。

如果你有一个唯一的ID节点,在该合并,然后使用ON CREATE添加其余属性(ON CREATE只有当MERGE导致创建而不是匹配您的数据库中的现有实体的创建时执行,还有另一个命令ON MATCH只在匹配而不是创建时才被执行)。

你最终的查询看起来像:

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "http://192.168.11.121/movie-reco-db/person_node.csv" as row 
MERGE (p:Person {personId: row.person_id}) 
ON CREATE SET p.name = row.name;