diff --git a/docs-2.0-zh/3.ngql-guide/7.general-query-statements/2.match.md b/docs-2.0-zh/3.ngql-guide/7.general-query-statements/2.match.md index e95a6bcfd6f..6d4ffb5f70f 100644 --- a/docs-2.0-zh/3.ngql-guide/7.general-query-statements/2.match.md +++ b/docs-2.0-zh/3.ngql-guide/7.general-query-statements/2.match.md @@ -82,8 +82,11 @@ nebula> MATCH (v:player) \ ```ngql +# 创建包含 name 属性和 age 属性的 Tag actor。 nebula> CREATE TAG actor (name string, age int); +# 插入 Tag actor 到点 player100。 nebula> INSERT VERTEX actor(name, age) VALUES "player100":("Tim Duncan", 42); +# 匹配 Tag 为 player 和 actor 的点。 nebula> MATCH (v:player:actor) \ RETURN v; +----------------------------------------------------------------------------------------+ @@ -129,6 +132,7 @@ nebula> MATCH (v:player) \ 使用`WHERE`子句直接匹配点的属性。 ```ngql +# 匹配属性中值等于 Tim Duncan 的点。 nebula> MATCH (v) \ WITH v, properties(v) as props, keys(properties(v)) as kk \ WHERE [i in kk where props[i] == "Tim Duncan"] \ @@ -139,6 +143,7 @@ nebula> MATCH (v) \ | ("player100" :player{age: 42, name: "Tim Duncan"}) | +----------------------------------------------------+ +# 匹配 name 属性值存在于 names 列表内的起点,并返回起点和终点的数据。 nebula> WITH ['Tim Duncan', 'Yao Ming'] AS names \ MATCH (v1:player)-->(v2:player) \ WHERE v1.player.name in names \ @@ -184,6 +189,7 @@ nebula> MATCH (v:player { name: 'Tim Duncan' })--(v2) \ | ("player102" :player{age: 33, name: "LaMarcus Aldridge"}) | +-----------------------------------------------------------+ +# 查找 ID 为 player100 和 player101 的点,并返回 name 属性。 nebula> MATCH (v) WHERE id(v) IN {"player100", "player101"} \ RETURN v.player.name AS name; +---------------+ @@ -204,6 +210,7 @@ nebula> MATCH (v) WHERE id(v) IN {"player100", "player101"} \ 在 nGQL 1.x 中,`--`符号用于行内注释,从 nGQL 2.x 起,`--`符号表示出边或入边,不再用于注释。 ```ngql +# name 属性值为 Tim Duncan 的点为 v,与 v 相连接的点为 v2,查找 v2 并返回其 name 属性值。 nebula> MATCH (v:player{name:"Tim Duncan"})--(v2:player) \ RETURN v2.player.name AS Name; +---------------------+ @@ -232,6 +239,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"})-->(v2:player) \ 如果需要判断目标点,可以使用`CASE`表达式。 ```ngql +# name 属性值为 Tim Duncan 的点为 v,与 v 相连接的点为 v2,查找 v2 并判断,如果 v2.team.name 的值不为空则返回 v2.team.name 属性值,如果 v2.player.name 的值不为空则返回 v2.player.name 属性值。 nebula> MATCH (v:player{name:"Tim Duncan"})--(v2) \ RETURN \ CASE WHEN v2.team.name IS NOT NULL \ @@ -252,6 +260,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"})--(v2) \ 如果需要扩展模式,可以增加更多点和边。 ```ngql +# name 属性值为 Tim Duncan 的点为 v,指向点 v2,点 v3 也指向点 v2,返回 v3 的 name 属性值。 nebula> MATCH (v:player{name:"Tim Duncan"})-->(v2)<--(v3) \ RETURN v3.player.name AS Name; +---------------------+ @@ -266,6 +275,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"})-->(v2)<--(v3) \ 如果不需要引用点,可以省略括号中表示点的变量。 ```ngql +# 查找 name 属性值为 Tim Duncan 的点 v, 点 v3 与 v 指向同一个点,返回 v3 的 name 属性值。 nebula> MATCH (v:player{name:"Tim Duncan"})-->()<--(v3) \ RETURN v3.player.name AS Name; +---------------------+ @@ -282,6 +292,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"})-->()<--(v3) \ 连接起来的点和边构成了路径。用户可以使用自定义变量命名路径。 ```ngql +# 设置路径 p,其模式为 name 属性值为 Tim Duncan 的点 v 指向相邻的点 v2。返回所有符合条件的路径。 nebula> MATCH p=(v:player{name:"Tim Duncan"})-->(v2) \ RETURN p; +--------------------------------------------------------------------------------------------------------------------------------------+ @@ -300,6 +311,7 @@ nebula> MATCH p=(v:player{name:"Tim Duncan"})-->(v2) \ ### 匹配边 ```ngql +# 匹配对应边并返回 3 条数据。 nebula> MATCH ()<-[e]-() \ RETURN e \ LIMIT 3; @@ -321,6 +333,7 @@ nebula> MATCH ()<-[e]-() \ 在 {{nebula.name}} 3.0.0 之前,匹配 Edge Type 的前提是 Edge Type 本身有对应属性的索引,否则,用户无法基于 Edge Type 执行 `MATCH` 语句。从 {{nebula.name}} 3.0.0 开始,匹配 Edge Type 可以不创建索引,但需要使用 `LIMIT` 限制输出结果数量,并且必须指定边的方向。从 {{nebula.name}} 3.5.0 开始,无需为 Edge Type 创建索引或者使用`LIMIT`限制输出结果数量,即可使用`MATCH`语句匹配边。 ```ngql +# 匹配所有 edge type 为 follow 的边。 nebula> MATCH ()-[e:follow]->() \ RETURN e; +----------------------------------------------------+