跳转至

自定义变量

NebulaGraph 允许将一条语句的结果作为自定义变量传递给另一条语句。

OpenCypher 兼容性

当引用一个变量的点、边或路径,需要先给它命名。例如:

nebula> MATCH (v:player{name:"Tim Duncan"}) RETURN v;
+----------------------------------------------------+
| v                                                  |
+----------------------------------------------------+
| ("player100" :player{name: "Tim Duncan", age: 42}) |
+----------------------------------------------------+

示例中的v就是自定义变量。

Caution

在同一个 MATCH 语句的模式中,不能重复使用边变量。例如e不能重复被写在模式p=(v1)-[e*2..2]->(v2)-[e*2..2]->(v3)中。

原生 nGQL

nGQL 扩展的自定义变量可以表示为$var_namevar_name由字母、数字或下划线(_)构成,不允许使用其他字符。

自定义变量仅在当前执行(本复合查询中)有效,执行结束后变量也会释放,不能在其他客户端、执行、session 中使用之前的自定义变量。

用户可以在复合查询中使用自定义变量。复合查询的详细信息请参见复合查询

Note

  • 自定义变量区分大小写。
  • 在包含扩展的自定义变量的复合语句中,用英文分号;结束定义变量的语句。详情参见 nGQL 风格指南

示例

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" |
+-----------+-----------------+

集合运算与变量语句的范围与运算顺序

当我们需要对集合运算的复合语句进行变量赋值时,需要注意用括号包裹语句的范围,比如下边的例子里$var赋值的来源是两个语句INTERSECT之后的输出。

$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

最后更新: May 9, 2024