概述
FOR
语句通过展开当前工作表,将列表解嵌套为独立行数据。
<for statement> ::= "FOR" <for item> [ <for ordinality or offset> ]
<for item> ::=
<binding variable> "IN" <list value expression>
<for ordinality or offset> ::=
"WITH" { "ORDINALITY" | "OFFSET" } <binding variable>
详情
<for ordinality or offset>
中的绑定变量,在名称上必须和<for item>
中的绑定变量不同。<for ordinality or offset>
定义的变量可以用来追踪元素在列表中的位置:ORDINALITY
提供基于1的索引(从1开始)。OFFSET
提供基于0的索引(从0开始),即序数位置为p
的元素,其索引为p-1
。
解嵌套列表
FOR item IN [1,2,3]
RETURN item
结果:
item |
---|
1 |
2 |
3 |
解嵌套绑定表
LET user = "Alex"
LET interests = ["tennis", "violin"]
FOR interest IN interests
RETURN user, interest
结果:
user | interest |
---|---|
Alex | tennis |
Alex | violin |
解嵌套组变量
本条查询获取C1
和C3
间的一条最短路径,并返回路径中边属性label
的值:
MATCH SHORTEST 1 ({_id: "C1"})-[trans:Transfers]-{1,6}({_id: "C3"})
FOR tran IN trans
RETURN tran.label
结果:
tran.label |
---|
normal |
normal |
本条查询中,变量trans
在量化路径中声明,当在路径模式外使用时,用来表示组引用度。可以使用FOR
语句解嵌套,将其传化成单一引用度。
WITH ORDINALITY
本条查询将列表中处于偶数位置的元素收集到新列表中:
FOR item in ["a", "b", "c", "d"] WITH ORDINALITY index // index starts from 1
FILTER index %2 = 0
RETURN collect_list(item)
结果:
collect_list(item) |
---|
["b","d"] |
WITH OFFSET
本条查询返回列表中的第二个元素:
FOR item in ["a", "b", "c", "d"] WITH OFFSET index // index starts from 0
FILTER index = 1
RETURN item
结果:
item |
---|
b |