FOR statementThe FOR statement can be used to iterate over the values of an array, and to perform certain actions with those values.
NoteA
FORloop 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::record('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 $key in 0..4 { CREATE type::record($table1, $key); CREATE type::record($table2, $key); };
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