引用属性
nGQL 提供属性引用符以允许用户在GO语句中引用起始点、目的点、边的属性,以及引用复合查询的输出结果。本文将详细介绍如何在 nGQL 中使用这些属性引用符。
openCypher 兼容性
属性引用符仅适用于原生 nGQL。
点属性引用符
| 引用符 | 说明 |
|---|---|
$^ | 引用起始点。 |
$$ | 引用目的点。 |
引用语法
$^.<tag_name>.<prop_name> # 起始点属性引用
$$.<tag_name>.<prop_name> # 目的点属性引用
tag_name:点的 Tag 名称。prop_name:Tag 内的属性名称。
边属性引用符
| 引用符 | 说明 |
|---|---|
_src | 边的起始点 |
_dst | 边的目的点 |
_type | 边的类型内部编码,正负号表示方向:正数为正向边,负数为逆向边 |
_rank | 边的 rank 值 |
引用语法
nGQL 允许用户引用边的属性,包括自定义的边属性和四种内置的边属性。
<edge_type>.<prop_name> # 自定义边属性引用
<edge_type>._src|_dst|_type|_rank # 内置边属性引用
edge_type:Edge type。prop_name:Edge type 的属性名称。
复合查询中的引用符
| 引用符 | 说明 |
|---|---|
$- | 引用复合查询中管道符之前的语句输出结果。更多信息请参见管道符。 |
示例
使用点属性引用符
# 返回起始点的 Tag player 的 name 属性值和目的点的 Tag player 的 age 属性值。
nebula> GO FROM "player100" OVER follow YIELD $^.player.name AS startName, $$.player.age AS endAge;
+--------------+--------+
| startName | endAge |
+--------------+--------+
| "Tim Duncan" | 36 |
| "Tim Duncan" | 41 |
+--------------+--------+
:::compatibility 历史版本兼容性
从悦数图数据库 2.6.0 起支持了新的 Schema 相关函数。以上示例在悦数图数据库 3.12.0 中的近似写法如下:
GO FROM "player100" OVER follow YIELD properties($^).name AS startName, properties($$).age AS endAge;
悦数图数据库 3.12.0 兼容新旧语法。
:::
使用边属性引用符
# 返回 Edge type follow 的 degree 属性值。
nebula> GO FROM "player100" OVER follow YIELD follow.degree;
+---------------+
| follow.degree |
+---------------+
| 95 |
+---------------+
# 返回 EdgeType 是 follow 的起始点 VID、目的点 VID、EdgeType 编码(正数为正向边,负数为逆向边),和边的 rank 值。
nebula> GO FROM "player100" OVER follow YIELD follow._src, follow._dst, follow._type, follow._rank;
+-------------+-------------+--------------+--------------+
| follow._src | follow._dst | follow._type | follow._rank |
+-------------+-------------+--------------+--------------+
| "player100" | "player101" | 17 | 0 |
| "player100" | "player125" | 17 | 0 |
+-------------+-------------+--------------+--------------+
:::compatibility 历史版本兼容性
从 悦数图数据库 2.6.0 起支持了新的 Schema 相关函数。以上示例在 悦数图数据库 3.12.0 中的近似写法如下:
GO FROM "player100" OVER follow YIELD properties(edge).degree;
GO FROM "player100" OVER follow YIELD src(edge), dst(edge), type(edge), rank(edge);
悦数图数据库 3.12.0 兼容新旧语法。
:::
复合查询中使用属性引用符
以下复合查询语句示例执行操作如下:
- 使用
$-.id引用管道符前面的GO FROM "player100" OVER follow YIELD dst(edge) AS id语句的结果,即返回follow边类型的目的点 ID。 - 使用
properties($^)函数获取serve类型边上起始点的球员的name属性。 - 使用
properties($$)函数获取serve类型边上目的点的团队的name属性。
nebula> GO FROM "player100" OVER follow \
YIELD dst(edge) AS id | \
GO FROM $-.id OVER serve \
YIELD properties($^).name AS Player, properties($$).name AS Team;
+-----------------+-----------+
| Player | Team |
+-----------------+-----------+
| "Tony Parker" | "Spurs" |
| "Tony Parker" | "Hornets" |
| "Manu Ginobili" | "Spurs" |
+-----------------+-----------+