Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add annotation to some examples of MATCH clause #2491

Merged
merged 6 commits into from Mar 4, 2024
13 changes: 13 additions & 0 deletions docs-2.0-zh/3.ngql-guide/7.general-query-statements/2.match.md
Expand Up @@ -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;
+----------------------------------------------------------------------------------------+
Expand Down Expand Up @@ -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"] \
Expand All @@ -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 \
Expand Down Expand Up @@ -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;
+---------------+
Expand All @@ -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;
+---------------------+
Expand Down Expand Up @@ -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 \
Expand All @@ -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;
+---------------------+
Expand All @@ -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;
+---------------------+
Expand All @@ -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;
+--------------------------------------------------------------------------------------------------------------------------------------+
Expand All @@ -300,6 +311,7 @@ nebula> MATCH p=(v:player{name:"Tim Duncan"})-->(v2) \
### 匹配边

```ngql
# 匹配对应边并返回前 3 条数据。
cooper-lzy marked this conversation as resolved.
Show resolved Hide resolved
nebula> MATCH ()<-[e]-() \
RETURN e \
LIMIT 3;
Expand All @@ -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;
+----------------------------------------------------+
Expand Down