使用Cypher加载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),而不必在已创建节点下分配每个标头?我想要标题名称作为属性。谢谢。

dalaoer007 回答:使用Cypher加载CSV,并将某些列名称作为属性

假设您知道CSV标头的前3个元素的名称,请执行以下查询:

  • 将标题行放回文件中,并使用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)
本文链接:https://www.f2er.com/3115854.html

大家都在问