• Start

Statements

FOR

The FOR statement creates a loop that iterates over the values of an array.

The FOR statement can be used to iterate over the values of an array, and to perform certain actions with those values.

SurrealQL Syntax

FOR @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;
};
-- Error: 'assignment operators are only allowed in SET and DUPLICATE KEY UPDATE clauses'

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);

Output

6

Was this page helpful?