如何将列表(从收集)转换为字符串

时间:2016-10-03 13:58:10

标签: string list neo4j cypher

使用CYPHER我可以使用collect()函数获得有序的事物列表。是否可以将这样的列表转换为简单的字符串,使其表现为单个字符串对象?

如果不可能,可以以某种方式顺序连接两个(或更多)collect语句的内容,以便在单行中我可以产生诸如'A,B,C a,b,c'的输出其中A,B,C是第一个收集声明的订购产品,a,b,c是第二个?

2 个答案:

答案 0 :(得分:3)

充实Dave的评论:首先,您想要合并您的馆藏,然后使用REDUCE()将每个项目附加到字符串中。像这样:

WITH COLLECT(first_group) AS a, COLLECT(second_group) AS b
WITH a + b AS c
WITH REDUCE(s = HEAD(c), n IN TAIL(c) | s + ', ' + n) AS result
RETURN result

查看REDUCE上的the docs,以便更好地了解Cypher中的工作原理。

答案 1 :(得分:0)

一个更通用的解决方案,也适用于对象集合(不仅仅是字符串集合),是使用APOC过程{{3}将串联集合转换为字符串化JSON }。

此示例使用字符串集合:

WITH ['A','B','C'] AS x, ['a','b','c'] AS y, ['do','re','mi'] AS z
WITH x + y + z AS data
CALL apoc.convert.toJson(data) YIELD value
RETURN value

将返回此信息:

"[\"A\",\"B\",\"C\",\"a\",\"b\",\"c\",\"do\",\"re\",\"mi\"]"

此示例使用对象集合:

WITH [{a:1},{b:2},{c:3}] AS x, [{a:10},{b:20},{c:30}] AS y, [{a:100},{b:200},{c:300}] AS z
WITH x + y + z AS data
CALL apoc.convert.toJson(data) YIELD value
RETURN value

将返回此信息:

"[{\"a\":1},{\"b\":2},{\"c\":3},{\"a\":10},{\"b\":20},{\"c\":30},{\"a\":100},{\"b\":200},{\"c\":300}]"