neo4j:来自纯字符串表示的整数列表

mzo*_*oll 0 neo4j cypher

语境

我想从 csv 文件读取到我的数据库并创建节点和连接。对于要创建的订单节点,要读取的字段之一是产品的填充列表(关系键),即看起来像这样"[123,456,789]",其中数字是产品 ID。

现在将数据读入数据库,我可以毫无问题地为订单和产品创建节点;进行另一次迭代我现在想通过展开订单中的产品列表并链接到相应的产品来创建边缘。

最好是,如果我可以在订单节点的创建时将包含列表的字符串转换为整数列表,以便对这些值进行简单循环并匹配产品节点就可以解决问题(也为了存储效率)会更好)。

问题

但是我无法弄清楚如何将所述字符串转换为包含整数的列表的所述格式。我为此想出一个密码的所有尝试都失败了。我将在下面发布其中一些,从字符串开始l

WITH '[123,456,789]' as l
WITH split(replace(replace(l,'[',''),']',''),',') as s
UNWIND s as ss
COLLECT(toInteger(ss) ) as k 
return k

WITH '[123,456,789]' as l
WITH split(replace(replace(l,'[',''),']',''),',') as s, [] as k
FOREACH(ss IN s| SET k = k + toInteger(ss) )
return k
Run Code Online (Sandbox Code Playgroud)

两个语句都失败了。

编辑

我找到了一个部分解决方案,但我不太满意,因为它仅适用于我手头的任务,但不是解决此列表转换的更一般问题的解决方案。

我发现可以创建一个空列表作为节点的属性,它可以连续更新:

CREATE (o:Order {k: []})
WITH o, '[123,456]' as l
WITH o, split(replace(replace(l,'[',''),']',''),',') as s
FOREACH(ss IN s | SET o.k= o.k + toInteger(ss) )
RETURN o.k
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这只适用于节点的属性,而不适用于绑定变量(见上文)

std*_*b-- 6

由于输入字符串看起来像一个有效的 JSON 对象,您可以简单地使用以下apoc.convert.fromJsonList函数APOC library

WITH "[123,456,789]" AS l
RETURN apoc.convert.fromJsonList(l)
Run Code Online (Sandbox Code Playgroud)