我有一个像这样的 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/