Overview
The FOR
statement allows you to unnest a list into individual rows by expanding the current working table.
<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>
Details
- The name of the binding variable in
<for ordinality or offset>
must differ from the binding variable in<for item>
. - The
<for ordinality or offset>
defines a variable to track the position of elements in the list:ORDINALITY
provides the ordinal position of each element, starting from 1.OFFSET
provides the zero-based position of each element, where the offset position of an element at ordinal positionp
isp−1
.
Unnesting a List
FOR item IN [1,1,2,3,null]
RETURN item
Result:
item |
---|
1 |
1 |
2 |
3 |
null |
FOR item IN [[1,2], [2,3,5]]
RETURN item
Result:
item |
---|
[1,2] |
[2,3,5] |
Unnesting a Binding Table
LET user = "Alex"
LET interests = ["tennis", "violin"]
FOR interest IN interests
RETURN user, interest
Result:
user | interest |
---|---|
Alex | tennis |
Alex | violin |
Unnesting a Group Variable
This query retrieves one shortest path between C1
and C3
, and returns the values of the property label
on edges in the path:
MATCH SHORTEST 1 ({_id: "C1"})-[trans:Transfers]-{1,6}({_id: "C3"})
FOR tran IN trans
RETURN tran.label
Result:
tran.label |
---|
normal |
normal |
In this query, the variable trans
, declared in a quantified path, holds a group degree of reference when used outside the path pattern. To convert it to a singleton degree of reference, you can use the FOR
statement to unnest it.
WITH ORDINALITY
This query collects elements in even positions from a list to a new list:
FOR item in ["a", "b", "c", "d"] WITH ORDINALITY index // index starts from 1
FILTER index %2 = 0
RETURN collect_list(item)
Result:
collect_list(item) |
---|
["b","d"] |
WITH OFFSET
This query returns the second element in a list:
FOR item in ["a", "b", "c", "d"] WITH OFFSET index // index starts from 0
FILTER index = 1
RETURN item
Result:
item |
---|
b |