Cypher UNWIND语句的用法(附带实例)
UNWIND 语句的作用是将列表转换为多行单个数据。UNWIND 语句也可以创建去重的列表。
该代码的返回值为如下:
表达式 a + b 可以通过 UNWIND 语句对其返回值进行列表拆分,具体代码如下:
为了避免返回结果为 0 行,我们将空列表用 null 进行替换,具体代码如下:
UNWIND将一个列表转换成多行数据
UNWIND 语句可以将列表拆解,输出多行数据,每行数据是列表中的一个元素。具体代码如下:UNWIND [1, 2, 3, NULL ] AS x RETURN x, 'val' AS y返回值如下:
│"x" │"y" │ │1 │"val"│ │2 │"val"│ │3 │"val"│ │null │"val"│从返回结果可以看出,原始列表的每个值(包括 null)都被作为单独的行返回。
UNWIND创建去重列表
UNWIND 语句可以与 WITH DISTINCT 语句和 collect() 函数组合,完成不包含重复元素的列表的创建。具体代码如下:WITH [1, 1, 2, 2] AS coll UNWIND coll AS x WITH DISTINCT x RETURN collect(x) AS setOfValsy在上述代码中:
- 第一行 WITH 语句的作用是定义一个列表变量;
- 第二行 UNWIND语句的作用是拆分列表;
- 第三行 WITH DISTINCT 语句的作用是对列表拆分后的数据进行去重;
- 第四行 collect() 函数的作用是将去重后的数据重新封装成一个列表。
该代码的返回值为如下:
│"setOfVals"│ │[1,2] │从返回结果可以看出,原始列表的每个值(包括 null)都被作为单独的行返回。
UNWIND处理返回值为列表的表达式
任何返回列表的表达式都可以与 UNWIND 语句一起使用。假设列表 a 为 [1, 2],列表 b 为 [3, 4],则 a + b 的返回值是一个列表。表达式 a + b 可以通过 UNWIND 语句对其返回值进行列表拆分,具体代码如下:
WITH [1, 2] AS a,[3, 4] AS b UNWIND (a + b) AS x RETURN x返回值如下:
│"x"│ │1 │ │2 │ │3 │ │4 │
UNWIND处理嵌套列表
每个 UNWIND 语句会进行一次列表的拆分,那么我们可以采用多个 UNWIND 语句来实现嵌套列表的拆分。具体代码如下:WITH [[1, 2],[3, 4], 5] AS nested UNWIND nested AS x UNWIND x AS y RETURN y返回值如下:
│"y"│ │1 │ │2 │ │3 │ │4 │ │5 │
UNWIND处理空列表
使用 UNWIND 语句对空列表进行拆分,得到的返回结果将为 0 行,无论其他查询是否有返回结果,具体代码如下:UNWIND [] AS empty RETURN empty, 'literal_that_is_not_returned'上述代码的返回结果显示为空列表
为了避免返回结果为 0 行,我们将空列表用 null 进行替换,具体代码如下:
WITH [] AS list UNWIND CASE WHEN list = [] THEN [null] ELSE list END AS emptylist RETURN emptylist上述代码对列表是否为空进行了判断,如果不为空,则返回列表本身;如果为空,则返回 null。该代码的返回值如下:
│"emptylist"│ │null │