引言
nGQL(NebulaGraph Query Language)是用于操作 NebulaGraph 的查询语言。它的语法类似于 Cypher,但有自己独特的特性。以下是一些 nGQL 的基本语法和操作示例,以帮助你入门。
基本概念
- 节点(Vertex):图中的点,具有唯一的ID和标签。
- 边(Edge):连接两个节点的线,有类型和方向。
- 属性(Property):节点和边可以有属性,用键值对表示。
基础语法
1.图空间
#1.创建图空间,vid_type选择FIXED_STRING(30)
CREATE SPACE test_space(partition_num=15, replica_factor=1, vid_type=FIXED_STRING(30));
#vid_type选择INT64)
CREATE SPACE test_space(partition_num=15, replica_factor=1, vid_type=INT64);
#2.查看所有图空间
show spaces
#3.使用图空间
use test_space
#4.删除图空间
drop space test_space
2.标签
#1.创建标签
create tag person(name string null, gender string null,age int null ,birthday date null)
#2.查看所有标签
show tags
#3.查看标签属性
describe tag person
#4.删除标签
drop tag person
#5.创建索引并重建索引
create tag index i_person_name_age on person(name(50),age)
rebuild tag index i_person_name_age
create tag index i_person_name on person(name(50))
rebuild tag index i_person_name
#6.查看索引
show tag indexes
#7.查看索引属性
describe tag index i_person_name
#8.删除索引
drop tag index i_person_name
#9.插入数据
insert vertex person(name, gender, age, birthday) values "1":("zhangsan","男", 25,date("1999-08-01")), "2":("lisi","男",24,date("2000-09-03")), "3":("xiaopang","男",24,date("2000-08-02"))
#10.查询所有数据
match (n:person) return n
#查询单条数据
fetch prop on person "2" yield person.name,person.gender,person.age,person.birthday
#11.删除节点
delete vertex "1"
#12.更新节点属性
update vertex "1" set person.age=30
#13.增加标签的属性
ALTER TAG person ADD (email string);
#14.删除标签的属性
ALTER TAG person DROP (email);
3.边类型
#1.创建边类型
create edge like(likeness double null)
#2.查看边类型
show edges
#3.查看边属性
describe edge like
#4.删除边类型
drop edge like
#5.创建索引并重建索引
create edge index i_like_likeness on like(likeness)
rebuild edge index i_like_likeness
#6.查看索引
show edge indexes
#7.查看索引属性
describe edge index i_like_likeness
#8.删除索引
drop edge index i_like_likeness
#9.插入数据
insert edge like(likeness) values "1"->"2":(0.98), "2"->"3":(0.56)
#10.查询所有数据
match (n:person)-[e:like]->(m:person) return n,e,m
#查询单条数据
fetch prop on like "1"->"2" yield like.likeness
#11.删除边
delete edge like "2"->"3"
#12.更新边属性
update edge "1"->"2" of like set like.likeness=0.88
4.复杂用法
#1.查询
match (n:person) where n.person.age>10 and n.person.name=="zhangsan" return n
match (a)-[e:like]->(b) where e.likeness > 0.80 return a,e,b
match (n:person) where n.person.name in["zhangsan","lisi"] return n
#2.使用聚合函数
match (n:person) return AVG(n.person.age)
match (n:person) return n.person.gender,COUNT(*)
#3.排序
match (n:person) return n.person.name, n.person.age as age order by age ASC
match (a)-[e:like]->(b) return a, e.likeness as l,b order by l DESC
#4.取顶点id
MATCH (n:person) RETURN id(n)
match (n:person)-[e:like]->(m:person) return id(n),e,id(m)