FOR
statementThe FOR
statement can be used to iterate over the values of an array, and to perform certain actions with those values.
NoteA
FOR
loop currently cannot modify items outside its own scope, such as variables declared before the loop.
SurrealQL SyntaxFOR @item IN @iterable { @block };
The following query shows example usage of this statement.
-- Create a person for everyone in the array FOR $name IN ['Tobie', 'Jaime'] { CREATE type::thing('person', $name) CONTENT { name: $name }; };
The following query shows the FOR
statement being used update a property on every user matching certain criteria.
-- Set can_vote to true for every person over 18 years old. FOR $person IN (SELECT VALUE id FROM person WHERE age >= 18) { UPDATE $person SET can_vote = true; };
Available since: v2.0.0
A FOR
loop can also be made out of a range UUID of integers.
FOR $year IN 0..=2024 { CREATE historical_events SET for_year = $year, events = "To be added"; }
Parameters declared outside of a FOR
loop can be used inside the loop.
LET $table1 = "person"; LET $table2 = "cat"; FOR $i in 0..4 { CREATE type::thing($table1, $i); CREATE type::thing($table2, $i); };
However, they currently cannot be modified inside a loop, making an operation like the following impossible.
LET $init = []; FOR $num IN 1..=3 { $init += $num; }; RETURN $init;
In this case, the array::fold
and array::reduce
functions can often be used to accomplish the intended behaviour.
(<array>1..=3).reduce(|$one, $two| $one + $two);
Output6