Neo4j将数组元素扩展为单独的行

时间:2017-06-20 09:15:54

标签: csv neo4j cypher

我有一个包含数组的CSV文件。该文件如下所示:

siblings
[3010,3011,3012]
[2010,2012]

我要做的是将数组的元素作为单独的行返回。

我查看了文档并找到了UNWIND函数。当我尝试文档中显示的示例时:

UNWIND [1, 2, 3] AS x
RETURN x
一切顺利。当我用我的数据尝试它时,查询看起来像这样:

LOAD CSV WITH HEADERS FROM
'file:///test.csv' AS line1
UNWIND line1.siblings as a
RETURN a

,结果是

[3010,3011,3012]
[2010,2012]

而不是:

3010
3011
3012
...

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

CSV列全部作为字符串处理,因此您需要将它们视为字符串。在您的情况下,您可以在将字符串拆分为集合之前从 siblings 列中删除括号。该步骤将帮助您避免预处理文件。一旦你拆分了字符串,你仍然有一个字符串集合。

WITH "[1001,1002,1003]" as numbers_with_brackets_in_a_string
WITH substring( numbers_with_brackets_in_a_string, 1, size(numbers_with_brackets_in_a_string)-2 ) as numbers_in_a_string
UNWIND split( numbers_in_a_string, ',' ) as number_as_a_string
RETURN number_as_a_string

答案 1 :(得分:0)

我找到了一种解决这个问题的丑陋方法。

我做了以下事情:

LOAD CSV WITH HEADERS FROM
'file:///test.csv' AS line1
WITH line1, split(line1.siblings, ",") as s
UNWIND s as sib
RETURN sib

之后我得到了以下内容:

[3010
3011
3012]
...

我从CSV文件中删除了[],我得到了我想要的输出。

我知道这是一个丑陋的解决方案,如果有人能找到更好的解决方案,我将不胜感激。