开发者学堂课程【阿里云图数据库 GDB 入门与应用 :Gremlin 语法入门】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/623/detail/9450
Gremlin 语法入门
内容介绍
一、TraversalStep 一览
二、所有的 DSL 语句从 g 开始
三、插入数据
四、查询数据
五、按属性过滤
六、分组、循环和排序
七、修改数据
八、删除数据
本节对 Gremlin 语法做一个简单的入门介绍
一、TraversalStep 一览
所有的 DSL 语句都可以按照步骤拆分为图上的 step,它就像管道一样会流逝的处理数据
第一种 step 是 filter 的操作,是将前一个的结果集经过一定的过滤作为下一个 step的输入
第二种 step 是 map 操作,是将一组输入按照一定的规则转化为另一组输入
第三种 step 是 flatMap 操作,是将每一个元素映射成零个或者多个元素
第四种 step 是 sideEffect 操作,进入一些计算的中间结果
第五种 step 是 branch 操作,在 DSL 语句中有一些分支的处理
二、所有的 DSL 语句从 g 开始
(1)所有的 DSL 语句从 g 开始,最常见的查询是流式查询,V()代表所有的点,E()代表所有的边
(2)查询所有点的数量
g.V().count()
(3)查询所有边的数量
g.E().count()
三、插入数据
(1)添加 Label 为学生的点,同时添加属性和值(有更多属性可以一直加下去)
g.addV(‘学生').property(id, '小明').property('name', '小明').property('age', 21)
g.addV('student') . property(id, '小红'). property('name', '小红').property('age', 20)
如果指定 id,id 不能使用‘’,属性需要将 key 引起来
(2)再加入另外一类点课程
g.addV(‘课程') .property(id, '程序设计语言'). property('名称’,'程序设计语言')
g.addV(‘课程') .property(id, '数据结构'). property('名称’,'数据结构')
(3)添加边
a.addE(‘认识').from(V(‘小明')).to(V(‘小红')).property('时间','20191001')
从 id 为小明的点出发到 id 为小红的点,小明小红认识时间是在2019年10月1号
a.addE(‘必修').from(V('小明')).to(V('程序设计语言')).property('分数’,90)
小明必修的程序设计语言分数为90
四、查询数据
(1)按照点 id 查询顶点,类似于 s
elect * from XX where id =“小明”
g.V(‘小明')
(2)返回时携带属性值
g.V(‘小明').valueMap(true);
下图是关于点、边的查询
注意:顶点为基准时,关联的点是 int()、out()、both,关联的边是 inE()、outE()、bothE()
边为基准时,关联的点是 outV、inV()、bothV()
例子:
(1)选了数据结构这门课的学生姓名
g.V(‘数据结构').in().properties('name')
先查出数据结构这个点,然后以该点为基准,它的入边所关联的点,然后拿到这些学生,返回学生的名称
(2)小明选了哪些课程
g.V().has(‘姓名',小明').out()
找出姓名为小明的人,然后获取到边所关联的点
五、按属性过滤
(1)按属性查询
g.V().has('name',’小明').has(‘age',18)
//姓名叫小明、年龄18岁的点
(2)范围/条件查询
g.V().has('age',gt(18)).has('name',startsWith('李'))
//年龄大于18岁,姓名以李开头
(3)有无判断
g.V().has('age').hasNot('name')
//有年龄、没有姓名的点
六、分组、循环和排序
(1)限制结果集
g.V().has('age',18).limit(10)
//返回十个年龄为18的点
(2)分组
g.V().group().by(label).by('name')
//按 label 分组,以及每组的姓名列表
(3)排序
g.V().hasLabel('学生').values('年龄').order()
//获取学生的年龄并排序(默认升序)
(4)循环
g.V('test-id').repeat(out()).times(2)
//循环单次操作: out().循环次数:2次
七、修改数据
(1)更新属性值
g.V(‘小明').has('age').property('age',20)
//确保必须有 age 这个属性,然后将年龄这个属性值更新为20
(2)插入属性值
g.V('小明').hasNot('age').property("age',20)
//确保没有 age 这个属性,然后插入age=20
(3)插入或更新属性值
g.V(‘小明').property('age' ,20)
//直接拿出小明这个点,如果有 age 属性就更新,如果没有就插入
八、删除数据
(1)删除顶点
g.V('testV-id').drop()
按照顶点的 id 拿出点,然后删除
(2)删除边
g.E('testE-id').drop()
拿出 id 为 testE 的点然后删除边
(3)删除指定的属性
g.V('testV-id').properties('age','name').drop()
先拿出该点,中间可以传多个属性,例如 age,name,然后删除这些指定的属性