【问题标题】:Neo4j CSV import - create or updateNeo4j CSV 导入 - 创建或更新
【发布时间】:2016-09-24 06:38:24
【问题描述】:

我有以下查询来创建人员节点 -

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 上设置唯一索引,那么它会显示 -

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

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

【问题讨论】:

    标签: neo4j cypher


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      相关资源
      最近更新 更多