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,然后删除这些指定的属性

相关文章
|
JSON JavaScript 前端开发
vue使用neovis操作neo4j图形数据库
vue使用neovis操作neo4j图形数据库
vue使用neovis操作neo4j图形数据库
|
SQL 存储 数据采集
【技术分享】元数据与数据血缘实现思路
【技术分享】元数据与数据血缘实现思路
8316 0
|
存储 Kubernetes 调度
|
10月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
8440 123
|
7月前
|
人工智能 自然语言处理 Java
Spring AI Alibaba实战:从0到1构建企业级智能应用
本文介绍了基于SpringAI Alibaba框架开发AI原生应用的实战指南。文章首先分析了SpringAI Alibaba作为SpringAI本土化版本的核心优势,包括深度适配阿里云生态、中文语境优化等特性。随后详细讲解了开发环境的搭建过程,包括JDK17、SpringBoot3.2.2等技术栈的配置。通过三个实战案例展示了核心功能实现:基础文本生成、结合MyBatisPlus的智能问答系统、以及流式响应和函数调用等高级特性。
5815 6
|
存储 自然语言处理 NoSQL
Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读
引入知识图谱技术后,传统RAG链路到Graph RAG链路会有什么样的变化,如何兼容RAG中的向量数据库(Vector Database)和图数据库(Graph Database)基座,以及蚂蚁的Graph RAG开源技术方案和未来优化方向。
9252 2
Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读

热门文章

最新文章