【问题标题】:Update existing relationship property value in Neo4j using CSV使用 CSV 更新 Neo4j 中的现有关系属性值
【发布时间】:2018-07-10 13:32:59
【问题描述】:

我已经有一些 Neo4j 中的数据,数据以以下方式建模:

:A {ID:"123",Group:"ABC",Family:"XYZ"}
:B {ID:"456",Group:"ABC",Family:"XYZ"})
(:A)-[:SCORE{score:'2'}]-(:B)

请查看附件图片以了解当前数据的外观。

现在, 我正在通过包含 5 列的 CSV 文件导入一些新数据

  1. A 的 ID
  2. 乙的身份证
  3. A 连接到 B 的分数
  4. 家庭

在新的数据中可以有一些新的A Ids或一些新的B Ids

问题:

  1. 我想创建 A 和 B 类型的新节点并创建关系“分数”并将分数分配为它们之间关系类型“分数”的值
  2. A 和 B 之间已经存在的分数可能已经改变。所以我只想用新的分数更新以前的分数。

如何编写 cypher 以使用 CSV 作为导入来解决上述问题。

我第一次使用以下密码查询来建模数据:

using periodic commit LOAD CSV WITH HEADERS FROM "file:///ABC.csv" as line Merge(a:A{ID: line.A,Group:line.Group,Family:line.Family})
Merge(b:B{ID: line.A,Group:line.Group,Family:line.Family})
Merge(a)-[:Score{score:toFloat(line.Score)}]-(b)

注意:对于两种类型的节点“A”和“B”,Family 和 Group 是相同的

提前致谢。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    您可以MERGE 关系并在事后设置分数,这样它就不会为每个新值创建新的 SCORE 关系。

    USING PERIODIC COMMIT
    LOAD CSV WITH HEADERS FROM "file:///ABC.csv" AS line
    MERGE (a:A {ID: line.A, Group:line.Group, Family:line.Family})
    MERGE (b:B {ID: line.A, Group:line.Group, Family:line.Family})
    MERGE (a)-[score:SCORE]-(b)
    SET score.score = toFloat(line.Score)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多