我有以下查询来创建人员节点 -
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});
我在 personId 设置索引, person_node.csv 是我从MySql数据库导出的文件,此查询工作正常,但问题是CSV文件会有我每次导出的新记录,如果我再次运行此查询,那么它正在创建重复的节点,如果我在 personId 上设置UNIQUE索引,则表示 -
Node 0 already exists with label Person and property "personId"=[1]
并且不会插入新记录。如果已经存在,还有更新记录的优雅方法,或者如果没有则创建新记录。
答案 0 :(得分:1)
你正在寻找MERGE操作,它将尝试匹配,如果找不到,它将创建它。请注意,如果您要合并的所有内容不存在(例如,将节点与personId和名称合并,但现有节点具有该personId但名称略有不同),则会创建该节点。
如果您拥有该节点的唯一ID,请对其进行合并,然后使用ON CREATE
添加其余属性(仅当MERGE导致创建而不是匹配数据库中的现有实体时,才会执行ON CREATE,还有另一个命令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;