在Neo4j中从csv加载节点时有条件地创建节点

在Neo4j中从csv加载节点时有条件地创建节点,csv,neo4j,Csv,Neo4j,我有一个csv格式的数据集。其中一个字段是“elem_类型”。基于此类型,我需要创建不同类型的节点,并在使用csv加载数据时,根据“elem_类型”为我的csv的“列”指定不同的名称,有何方法 我的csv没有标题,数据如下所示: 0, 123, Marco, Ciao 1, 345, Merceds, Car, Yellow 2, 987, Boat, 150cm 基于我的“elem_类型”的第一个colmuns,我想加载数据并定义3种类型的节点(人、车、船),同时基于elem_类型定义不同的

我有一个csv格式的数据集。其中一个字段是“elem_类型”。基于此类型,我需要创建不同类型的节点,并在使用csv加载数据时,根据“elem_类型”为我的csv的“列”指定不同的名称,有何方法

我的csv没有标题,数据如下所示:

0, 123, Marco, Ciao
1, 345, Merceds, Car, Yellow
2, 987, Boat, 150cm

基于我的“elem_类型”的第一个colmuns,我想加载数据并定义3种类型的节点(人、车、船),同时基于elem_类型定义不同的头文件,我强烈建议将csv文件预解析为每个标签的单独文件。这将使输入密码变得更加容易。在下文中,我使用了一个小技巧,将CASE命令包装在FOREACH中:

load csv from "file:///test.csv" as line
foreach (i in case when line[0] = '0' then [1] else [] end | 
  merge (p:Person {id: line[1]}) set p.name = line[2] )
foreach (i in case when line[0] = '1' then [1] else [] end | 
  merge (c:Car {id: line[1]}) set c.name = line[2], c.color = line[4] )
foreach (i in case when line[0] = '2' then [1] else [] end | 
  merge (b:Boat {id: line[1]}) set b.name = line[2] )

另外,不要忘了为正在合并的属性添加索引。

谢谢您的回答!我试过了,效果很好!你知道我是否可以使用“neo4j(admin)import”获得相同的结果,这样我就可以定义“header csv”,因为在我的真实数据集中,我必须定义的3种类型的节点都有很多属性,并将它们全部写入代码中。建议使用neo4j admin import创建一个新的数据库。不能使用它来处理现有数据库。由于这个限制,我几乎没有使用过它,在这里无法给你帮助。另外,您通常会解析csv数据,否则Neo4j中的任何属性都只是一个字符串。将csv字段转换为数字、数据时间、布尔值等,。。将在以后使用数据库时帮助您。因此,无论如何都必须枚举每个属性