Neo4j Cypher在CSV导入期间存储数组属性

4
我需要从一个csv文件中导入数据,该文件的格式如下:
id;name;targetset
1;"somenode",[1,3,5,8]
2,"someothernode",[3,8]

我需要将targetset作为集合(数组)使用Cypher存储到图形数据库中。我尝试过:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/mytable.csv" AS row FIELDTERMINATOR ';'
CREATE (:MyNode {id: row.id, name: row.name, targetset: row.targetset});

但它将targetset存储为字符串,例如"[1,3,5,8]"。似乎没有将数组编码字符串转换为实际数组的函数,就像有toInt将字符串转换为整数一样。还有其他可能性吗?

2个回答

5

APOC Procedures将是您在这里的最佳选择。使用函数apoc.convert.fromJsonList()

使用示例:

WITH "[1,3,5,8]" as arr
RETURN apoc.convert.fromJsonList(arr)

1
为什么apoc是我最好的选择?语法简单易懂?速度快?我从未使用过。 - tscherg
出于查询简单的考虑,它最容易填补功能差距,并且易于使用和阅读。 - InverseFalcon
1
@tscherg 这种解决方案相比于我的解决方案的主要优点是apoc.convert.fromJsonList将返回一个整数值数组。我提出的解决方案将返回一个字符串值数组...因此,我认为InverseFalcon的解决方案在这种情况下更加适用。 - Bruno Peres
@InverseFalcon 尝试在本地(win10)集成 APOC。也许我可以避免在此处提出新问题:在浏览器中,除了 apoc.schema.assert 之外,它不显示任何过程。远程工作正常(debian)。有什么想法吗? - tscherg

2
你可以试试这个:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/mytable.csv" AS row FIELDTERMINATOR ';'
CREATE (:MyNode {id: row.id, name: row.name, targetset: split(substring(row.targetset, 1, length(row.targetset) - 2), ',') });

以上代码使用 substring()length() 函数从字符串 [1,3,5,8] 中删除了 [] 字符。在使用逗号 , 作为分隔符拆分字符串 1,3,5,8 后。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接