csv - 使用 Cypher 加载 CSV,并将某些列名称作为属性

标签 csv neo4j cypher load-csv

我有一个像这样的 CSV,第一行是标题(H1、H2、H3...)-

H1,H2,H3,H4,H5,...
a1,a2,a3,a4,a5,...
b1,b2,b3,b4,b5,...

我已经有一个 neo4j 数据库,其中我使用第一列 (H1) 合并节点,并使用 H2 和 H3 行创建新节点。当我去掉标题行时,我的代码如下所示 -

LOAD CSV FROM 'file:///mycsv.csv' AS row
MERGE (a:existingNode {name:row[0]})
CREATE (b:NewNode {name1:row[2], name2: row[1], name3: row[0]})
MERGE (a)-[:isAssociated]->(b)

如何导入 CSV,以便将其余标题 H4、H5...设置为创建的节点(基于 H2 和 H3)的属性,而不必在创建的节点下分配每个标题?我想要标题名称作为属性。谢谢。

最佳答案

假设您知道 CSV header 前 3 个元素的名称,此查询:

  • 将标题行放回到文件中并使用LOAD CSV WITH HEADER
  • 使用 apoc.map.removeKeys函数创建一个不包含每行前 3 个元素的 map ,以及
  • 使用 SET b += ... 操作将该映射的元素添加到 b(不触及具有不同名称的其他现有属性)
LOAD CSV WITH HEADERS FROM 'file:///mycsv.csv' AS row
MERGE (a:existingNode {name: row.H1})
CREATE (b:NewNode {name1: row.H3, name2: row.H2, name3: row.H1})
SET b += apoc.map.removeKeys(row, ['H1', 'H2', 'H3'])
MERGE (a)-[:isAssociated]->(b)

关于csv - 使用 Cypher 加载 CSV,并将某些列名称作为属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58822787/

相关文章:

neo4j - 设置标签 : pass label name as parameter

Neo4j:使用可选关系实现软删除

python - 在 CSV 文件 python 中添加带逗号的字符串

python - 如何在标题前使用配置行写入 csv 数据框

ruby - 使用不同的编码和库解析 CSV 文件

neo4j - 图 DB 与 Prolog(或 miniKanren)

php - 显示结果然后提供导出到 .csv 的选项?

database - 如何找到每场比赛的前10名?

Neo4j 对链接在一起的节点之间的相同属性执行平均操作

java - 在 jQAssistant 查询中排除内部类