使用具有某些列名称作为属性的 Cypher 加载 CSV

Loading CSV with Cypher with certain column names as properties

我有这样的 CSV,第一行是 header (H1, H2, H3,...) -

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

我已经有一个 neo4j 数据库,我在其中使用第一列 (H1) 合并节点并使用 H2 和 H3 的行创建一个新节点。当我去掉 header 行时,我的代码看起来像这样 -

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,以便将 header 的其余 H4、H5 等设置为已创建节点的属性(基于 H2 和 H3),而无需分配每个节点header创建的节点下?我想要 header 名称作为属性。谢谢。

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

  • 将 header 行放回文件中并使用 LOAD CSV WITH HEADER
  • 使用apoc.map.removeKeys函数创建一个没有每个row
  • 的前3个元素的地图
  • 使用 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)