Gremlin 语法入门| 学习笔记

简介: 快速学习 Gremlin 语法入门。

开发者学堂课程【阿里云图数据库 GDB 入门与应用 :Gremlin 语法入门】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/623/detail/9450


Gremlin 语法入门

 

内容介绍

一、TraversalStep 一览

二、所有的 DSL 语句从 g 开始

三、插入数据

四、查询数据

五、按属性过滤

六、分组、循环和排序

七、修改数据

八、删除数据

 

本节对 Gremlin 语法做一个简单的入门介绍


一、TraversalStep 一览

image.png

所有的 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 查询顶点,类似于 select * from XX where id =“小明”

g.V(‘小明')

(2)返回时携带属性值

g.V(‘小明').valueMap(true);

下图是关于点、边的查询

image.png

注意:顶点为基准时,关联的点是 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,然后删除这些指定的属性

相关文章
|
C++
C++语言学习基本语法应用案例
C++语言学习基本语法应用案例
62 0
|
存储 安全 编译器
C++基础入门——语法详解篇(下)2
C++基础入门——语法详解篇(下)2
109 0
|
2月前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
7月前
|
编译器 C++
深入理解 C++ 语法:从基础知识到高级应用
了解C++基础语法,包括`#include <iostream>`引入输入输出库,`using namespace std`简化命名。`int main()`是程序入口,`cout << "Hello World!"`用于输出文本。换行可使用`\n`或`endl`。注释使用`//`进行单行注释,`/* */`进行多行注释。
71 0
|
7月前
|
存储 编译器 C++
C++从入门到精通:1.1.2基础语法之数据类型
C++从入门到精通:1.1.2基础语法之数据类型
|
机器学习/深度学习 人工智能 JSON
【python】入门第一课:了解基本语法(数据类型)
Python是一种通用的高级编程语言,由Guido van Rossum于1991年创建。它被设计为易读、易学以及具有清晰和简洁的语法结构。Python支持多种编程范式,包括面向对象、函数式和过程式编程。它拥有广泛的第三方库和模块,可以用于各种领域的应用开发,如网站开发、科学计算、人工智能等。这种语言被广泛应用于各个领域,并且在数据科学和机器学习领域非常受欢迎。
|
存储 安全 编译器
“C++基础入门指南:了解语言特性和基本语法”(下)
“C++基础入门指南:了解语言特性和基本语法”(下)
98 0
|
Java 编译器 程序员
“C++基础入门指南:了解语言特性和基本语法”(上)
“C++基础入门指南:了解语言特性和基本语法”(上)
71 0
|
存储 编译器 C++
“C++基础入门指南:了解语言特性和基本语法”(中)
“C++基础入门指南:了解语言特性和基本语法”(中)
97 0
|
编译器 Linux C语言
c++入门语法
1. 命名空间 1.1 域的介绍 域就是指的作用域,分为全局作用域和局部作用域,这一点就不用解释了,先看一个实例来了解域和命名空间的联系
96 0

相关实验场景

更多