如何在Neo4j中将数字列表作为整数存储在CSV文件中

时间:2017-10-31 20:47:07

标签: csv import neo4j

我有一个包含以下数字的CSV文件,例如

example.csv contains(Field A1):

1, 2, 4, 5, 6, 7, 10

我尝试使用以下Neo4j代码

LOAD CSV FROM "file:///example.csv" AS line
CREATE (d:Data) SET d.date= timestamp()
SET d.data = line WITH d
MATCH (t:Timestamp {name: "Digital"})
CREATE (d)<-[:HAS]-(t)

所以在d.data中,存储了一个字符串列表,但我想要一个整数列表。我尝试使用下面的代码,但它给出了一个错误。

SET d.data = toInt(line)

是否可以将d.data中的CSV数据存储为整数列表?提前谢谢。

2 个答案:

答案 0 :(得分:0)

line是一个值列表,因此您可以使用list comprehension将其每个元素转换为整数。如果字符串中有空格,请使用trim删除它们(ltrim也可能有效,但性能提升很小。)

LOAD CSV FROM "file:///example.csv" AS line
CREATE (d:Data) SET d.date = timestamp()
SET d.data = [value IN line | toInteger(trim(value))]
WITH d
MATCH (t:Timestamp {name: "Digital"})
CREATE (d)<-[:HAS]-(t)

(请注意,如果您不使用WITH HEADERS选项,line变量只是一个列表。)

答案 1 :(得分:0)

您可以将函数映射到字符串列表,如此,

LOAD CSV FROM "file:///example.csv" AS line
CREATE (d:Data) SET d.date= timestamp()
SET d.data = extract(i in line | toInt(i)) WITH d
MATCH (t:Timestamp {name: "Digital"})
CREATE (d)<-[:HAS]-(t)

我不确定cypher是否会自动将line转换为列表,但如果它没有,您也可以尝试,

LOAD CSV FROM "file:///example.csv" AS line
CREATE (d:Data) SET d.date= timestamp()
SET d.data = extract(i in split(line,",") | toInt(i)) WITH d
MATCH (t:Timestamp {name: "Digital"})
CREATE (d)<-[:HAS]-(t)