User-defined variables¶
User-defined variables allow passing the result of one statement to another.
OpenCypher compatibility¶
In openCypher, when you refer to the vertex, edge, or path of a variable, you need to name it first. For example:
nebula> MATCH (v:player{name:"Tim Duncan"}) RETURN v;
+----------------------------------------------------+
| v |
+----------------------------------------------------+
| ("player100" :player{name: "Tim Duncan", age: 42}) |
+----------------------------------------------------+
The user-defined variable in the preceding query is v
.
Caution
In a pattern of a MATCH statement, you cannot use the same edge variable repeatedly. For example, e
cannot be written in the pattern p=(v1)-[e*2..2]->(v2)-[e*2..2]->(v3)
.
Native nGQL¶
User-defined variables are written as $var_name
. The var_name
consists of letters, numbers, or underline characters. Any other characters are not permitted.
The user-defined variables are valid only at the current execution (namely, in this composite query). When the execution ends, the user-defined variables will be automatically expired. The user-defined variables in one statement CANNOT be used in any other clients, executions, or sessions.
You can use user-defined variables in composite queries. Details about composite queries, see Composite queries.
Note
- User-defined variables are case-sensitive.
- To define a user-defined variable in a compound statement, end the statement with a semicolon (;). For details, please refer to the nGQL Style Guide.
Example¶
nebula> $var = GO FROM "player100" OVER follow YIELD dst(edge) AS id; \
GO FROM $var.id OVER serve YIELD properties($$).name AS Team, \
properties($^).name AS Player;
+-----------+-----------------+
| Team | Player |
+-----------+-----------------+
| "Spurs" | "Tony Parker" |
| "Hornets" | "Tony Parker" |
| "Spurs" | "Manu Ginobili" |
+-----------+-----------------+
Set operations and scope of user-defined variables¶
When assigning variables within a compound statement involving set operations, it is important to enclose the scope of the variable assignment in parentheses. In the example below, the source of the $var
assignment is the results of the output of two INTERSECT
statements.
$var = ( \
GO FROM "player100" OVER follow \
YIELD dst(edge) AS id \
INTERSECT \
GO FROM "player100" OVER follow \
YIELD dst(edge) AS id \
); \
GO FROM $var.id OVER follow YIELD follow.degree AS degree