Skip to content

Statements

FOR

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

Note

A FOR loop currently cannot modify items outside its own scope, such as variables declared before the loop.

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

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?