本章将帮助您在嬴图数据库中开始使用GQL。
示例图集
以下示例根据该图集运行:
注意
- 本图集包含以下标签:
- 点标签:
Person
,Club
和Company
- 边标签:
Join
和WorkIn
- 点标签:
- 除标签外,每个点和边都与一些属性相关联,例如标签
Person
下的点拥有属性_id
、name
和gender
。 - 如果未对属性赋值,则属性值为
null
,例如连接点P1
和点CO1
的边,其endOn
属性值为null
。 - 除了上文提及的属性,每个点或边都拥有属性
_uuid
,该属性作为唯一识别符在插入数据时由系统自动生成。
返回Hello World
RETURN
语句用于向GQL客户端输出结果。
RETURN "Hello World"
从数据库读取数据
可从图中读取的数据包括点、边和路径。可在MATCH
语句中编写相应模式提取这些数据。
点
GQL使用一对括号()
来表示点:
// 任意点
()
// 标签为Person的任意点
(:Person)
// 标签为Person且与变量n绑定的任意点
(n:Person)
// name为Kavi Moore的任意点
({name: "Kavi Moore"})
// 标签为Club,score超过7,且与变量n绑定的任意点
(n:Club WHERE n.score > 7)
本条查询获取标签为Person
且gender
为male的点:
MATCH (p:Person {gender: "male"})
RETURN p
结果:p
_id | _uuid | schema | values |
---|---|---|---|
P1 | Sys-gen | Person | {name: "Kavi Moore", gender: "male"} |
P2 | Sys-gen | Person | {name: "Sira Lox", gender: "male"} |
边
GQL使用一对方括号[]
结合边的方向来表示边:
// 任意方向的任意边
-[]-
// 标签为Join,指向右侧,且与变量e绑定的任意边
-[e:Join]->
// 标签为Join,指向左侧,memberNo为1,且与变量e绑定的任意边
<-[e:Join {memberNo: 1}]-
// 方向任意,startOn早于2022-1-1,且与变量e绑定的任意边
-[e WHERE startOn < "2022-1-1"]-
本条查询获取标签为WorkIn
且endOn
为null
的边:
MATCH -[e:WorkIn WHERE e.endOn IS NULL]->
RETURN e
结果:e
_uuid |
_from |
_to |
_from_uuid |
_to_uuid |
schema |
values |
---|---|---|---|---|---|---|
Sys-gen | P1 | CO1 | UUID of P1 | UUID of CO1 | WorkIn | {StartOn: "2023-05-03 00:00:00", endOn: null} |
路径
一条路径通常以点开始,以点结束,点边交替出现。因此,可以将点模式与边模式递归连接,形成路径模式。
// 任意一步路径,其中任意两点由任意一边连接
()-[]-()
// 任意一步路径,其中标签为Club的点通过标签为Join且指向左侧的边与任意点相连;路径与变量p绑定,路径的起点与变量c绑定
p = (c:Club)<-[:Join]-()
// 任意两步路径,其中标签为Person的两个点与_id为C1的点通过标签为Join的边相连,边由Person指向C1;路径与变量p绑定
p = (:Person)-[:Join]->({_id: "C1"})<-[:Join]-(:Person)
本条查询获取的每条路径都表明某人当前在InnoVex
公司工作,并返回路径和此人的姓名:
MATCH p = (n:Person)-[e:WorkIn WHERE e.endOn IS NULL]->(:Company {name: "InnoVex"})
RETURN p, n.name
结果:
p | n.name |
---|---|
(:Person {_id: "P1", name: "Kavi Moore", gender: "male"})-[:WorksIn {startOn: "2023-05-03 00:00:00", endOn: null}]->(:Company {_id: "C01", name: "InnoVex"}) | Kavi Moore |
向数据库写入数据
您可通过插入、更新或删除数据库的点边信息对数据库进行写操作。
插入
INSERT
语句用于在数据库中创建新的点和边。
本条语句插入标签为Person
的点,并设定其_id
为P4,name
为Tiva Jorn:
INSERT (:Person {_id: "P4", name: "Tiva Jorn"})
本条查询插入标签为WorkIn
的边,其起点_id
为P4,终点_id
为C01,其startOn
属性值为2025-3-1:
MATCH (innovex {_id: "CO1"}), (tiva {_id: "P4"})
INSERT (tiva)-[:WorkIn {startOn: "2025-3-1"}]->(innovex)
更新
SET
语句用来更新数据库中已有点边的属性值。更新数据前,需先使用MATCH
语句获取待更新的点或边。
本条查询更新_id
为P4的点数据,将其gender
属性值设定为female:
MATCH (tiva {_id: "P4"})
SET tiva.gender = "female"
本条查询更新起点_id
为P4,终点_id
为C01,且标签为WorkIn
的边数据,将其startOn
属性值设定为2025-4-1:
MATCH ({_id: "P4"})-[e:WorkIn]->({_id: "CO1"})
SET e.startOn = "2025-4-1"
删除
DELETE
语句用于删除数据库中的点和边。删除前,需先使用MATCH
语句获取待删除的点或边。默认情况下,无法删除与其他边相连的点。
本条查询删除了标签为WorkIn
的边,其起点_id
为P4,终点_id
为C01:
MATCH ({_id: "P4"})-[e:WorkIn]->({_id: "CO1"})
DELETE e
本条查询删除_id
为P4的点:
MATCH (n {_id: "P4"})
DELETE n