2

我有一个这样的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),而无需在已创建节点下分配每个标头?我希望标题名称作为属性。谢谢。

4

1 回答 1

2

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

  • 将标题行放回文件中并使用LOAD CSV WITH HEADER,
  • 使用apoc.map.removeKeys函数创建一个没有前 3 个元素的地图row,并且
  • 使用该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)
于 2019-11-12T21:21:17.723 回答