GO
本文操作仅适用于原生nGQL。
<N> STEPS
:指定跳数。如果没有指定跳数,默认值N
为1
。如果N
为0
,Nebula Graph不会检索任何边。Note
GO
语句采用的路径类型是walk
,即遍历时点和边可以重复。详情参见路径。M TO N STEPS
:遍历M~N
跳的边。如果M
为0
,输出结果和M
为1
相同,即GO 0 TO 2
和GO 1 TO 2
是相同的。<vertex_list>
:用逗号分隔的点ID列表,或特殊的引用符$-.id
。详情参见。REVERSELY | BIDIRECT
:默认情况下检索的是<vertex_list>
的出边(正向),REVERSELY
表示反向,即检索入边;BIDIRECT
为双向,即检索正向和反向,通过返回<edge_type>._type
字段判断方向,其正数为正向,负数为反向。WHERE <conditions>
:指定遍历的过滤条件。用户可以在起始点、目的点和边使用WHERE
子句,还可以结合AND
、OR
、NOT
、XOR
一起使用。详情参见WHERE。Note
遍历多个Edge type时,
WHERE
子句有一些限制。例如不支持WHERE edge1.prop1 > edge2.prop2
。YIELD [DISTINCT] <return_list>
:定义需要返回的输出。<return_list>
建议使用,当前支持src(edge)
、dst(edge)
、type(edge)
、rank(edge)
、properties(edge)
、id(vertex)
、properties(vertex)
,暂不支持嵌套函数。详情参见YIELD。如果没有指定,默认返回目的点ID。SAMPLE <sample_list>
:用于在结果集中取样。详情参见。GROUP BY
:根据指定属性的值将输出分组。详情参见GROUP BY。分组后需要再次使用YIELD
定义需要返回的输出。:指定输出结果的排序规则。详情参见。
Note
没有指定排序规则时,输出结果的顺序不是固定的。
LIMIT [<offset>,] <number_rows>]
:限制输出结果的行数。详情参见LIMIT。
# 返回player102所属队伍。
nebula> GO FROM "player102" OVER serve;
+------------+
| serve._dst |
+------------+
| "team203" |
| "team204" |
+------------+
# 返回距离player102两跳的朋友。
nebula> GO 2 STEPS FROM "player102" OVER follow;
+-------------+
| follow._dst |
+-------------+
| "player101" |
| "player125" |
+-------------+
...
# 遍历多个Edge type。属性没有值时,会显示UNKNOWN_PROP。
YIELD properties(edge).degree, properties(edge).start_year;
+-------------------------+-----------------------------+
| properties(EDGE).degree | properties(EDGE).start_year |
+-------------------------+-----------------------------+
| 95 | UNKNOWN_PROP |
| 95 | UNKNOWN_PROP |
| UNKNOWN_PROP | 1997 |
+-------------------------+-----------------------------+
# 返回player100入方向的邻居点。
nebula> GO FROM "player100" OVER follow REVERSELY \
YIELD src(edge) AS destination;
+-------------+
| destination |
+-------------+
| "player101" |
| "player102" |
+-------------+
...
# 该MATCH查询与上一个GO查询具有相同的语义。
nebula> MATCH (v)<-[e:follow]- (v2) WHERE id(v) == 'player100' \
RETURN id(v2) AS destination;
+-------------+
| destination |
| "player101" |
| "player102" |
+-------------+
...
# 查询player100 1~2跳内的朋友。
nebula> GO 1 TO 2 STEPS FROM "player100" OVER follow \
YIELD dst(edge) AS destination;
+-------------+
+-------------+
| "player101" |
| "player125" |
...
# 该MATCH查询与上一个GO查询具有相同的语义。
nebula> MATCH (v) -[e:follow*1..2]->(v2) \
WHERE id(v) == "player100" \
RETURN id(v2) AS destination;
+-------------+
| destination |
+-------------+
| "player100" |
| "player102" |
...
# 根据年龄分组。
nebula> GO 2 STEPS FROM "player100" OVER follow \
YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS age \
| GROUP BY $-.dst \
YIELD $-.dst AS dst, collect_set($-.src) AS src, collect($-.age) AS age;
+-------------+----------------------------+----------+
| dst | src | age |
+-------------+----------------------------+----------+
| "player125" | ["player101"] | [41] |
| "player100" | ["player125", "player101"] | [42, 42] |
| "player102" | ["player101"] | [33] |
+-------------+----------------------------+----------+
# 在多个边上通过IS NOT EMPTY进行判断。
nebula> GO FROM "player100" OVER follow WHERE properties($$).name IS NOT EMPTY YIELD dst(edge);
+-------------+
| follow._dst |
+-------------+
| "player125" |
+-------------+
最后更新: November 1, 2021