GO

    本文操作仅适用于原生nGQL。

    • <N> STEPS:指定跳数。如果没有指定跳数,默认值N1。如果N0,Nebula Graph不会检索任何边。

      Note

      GO语句采用的路径类型是walk,即遍历时点和边可以重复。详情参见路径

    • M TO N STEPS:遍历M~N跳的边。如果M0,输出结果和M1相同,即GO 0 TO 2GO 1 TO 2是相同的。

    • <vertex_list>:用逗号分隔的点ID列表,或特殊的引用符$-.id。详情参见。

    • REVERSELY | BIDIRECT:默认情况下检索的是<vertex_list>的出边(正向),REVERSELY表示反向,即检索入边;BIDIRECT 为双向,即检索正向和反向,通过返回 <edge_type>._type 字段判断方向,其正数为正向,负数为反向。

    • WHERE <conditions>:指定遍历的过滤条件。用户可以在起始点、目的点和边使用WHERE子句,还可以结合ANDORNOTXOR一起使用。详情参见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

    1. # 返回player102所属队伍。
    2. nebula> GO FROM "player102" OVER serve;
    3. +------------+
    4. | serve._dst |
    5. +------------+
    6. | "team203" |
    7. | "team204" |
    8. +------------+
    1. # 返回距离player102两跳的朋友。
    2. nebula> GO 2 STEPS FROM "player102" OVER follow;
    3. +-------------+
    4. | follow._dst |
    5. +-------------+
    6. | "player101" |
    7. | "player125" |
    8. +-------------+
    9. ...
    1. # 遍历多个Edge type。属性没有值时,会显示UNKNOWN_PROP。
    2. YIELD properties(edge).degree, properties(edge).start_year;
    3. +-------------------------+-----------------------------+
    4. | properties(EDGE).degree | properties(EDGE).start_year |
    5. +-------------------------+-----------------------------+
    6. | 95 | UNKNOWN_PROP |
    7. | 95 | UNKNOWN_PROP |
    8. | UNKNOWN_PROP | 1997 |
    9. +-------------------------+-----------------------------+
    1. # 返回player100入方向的邻居点。
    2. nebula> GO FROM "player100" OVER follow REVERSELY \
    3. YIELD src(edge) AS destination;
    4. +-------------+
    5. | destination |
    6. +-------------+
    7. | "player101" |
    8. | "player102" |
    9. +-------------+
    10. ...
    11. # 该MATCH查询与上一个GO查询具有相同的语义。
    12. nebula> MATCH (v)<-[e:follow]- (v2) WHERE id(v) == 'player100' \
    13. RETURN id(v2) AS destination;
    14. +-------------+
    15. | destination |
    16. | "player101" |
    17. | "player102" |
    18. +-------------+
    19. ...
    1. # 查询player100 1~2跳内的朋友。
    2. nebula> GO 1 TO 2 STEPS FROM "player100" OVER follow \
    3. YIELD dst(edge) AS destination;
    4. +-------------+
    5. +-------------+
    6. | "player101" |
    7. | "player125" |
    8. ...
    9. # 该MATCH查询与上一个GO查询具有相同的语义。
    10. nebula> MATCH (v) -[e:follow*1..2]->(v2) \
    11. WHERE id(v) == "player100" \
    12. RETURN id(v2) AS destination;
    13. +-------------+
    14. | destination |
    15. +-------------+
    16. | "player100" |
    17. | "player102" |
    18. ...
    1. # 根据年龄分组。
    2. nebula> GO 2 STEPS FROM "player100" OVER follow \
    3. YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS age \
    4. | GROUP BY $-.dst \
    5. YIELD $-.dst AS dst, collect_set($-.src) AS src, collect($-.age) AS age;
    6. +-------------+----------------------------+----------+
    7. | dst | src | age |
    8. +-------------+----------------------------+----------+
    9. | "player125" | ["player101"] | [41] |
    10. | "player100" | ["player125", "player101"] | [42, 42] |
    11. | "player102" | ["player101"] | [33] |
    12. +-------------+----------------------------+----------+
    1. # 在多个边上通过IS NOT EMPTY进行判断。
    2. nebula> GO FROM "player100" OVER follow WHERE properties($$).name IS NOT EMPTY YIELD dst(edge);
    3. +-------------+
    4. | follow._dst |
    5. +-------------+
    6. | "player125" |
    7. +-------------+

    最后更新: November 1, 2021