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图形数据库
|
7月前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
14244 21
|
11月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
8667 127
|
12月前
|
存储 人工智能 API
Qoder 正式开放订阅,Credits 耐用度提升1/3
Qoder 自 2025 年 8 月 21 日公测以来,以最强的上下文工程能力以及 Repo Wiki、Quest Mode 等广受好评的产品功能,收获了全球开发者的支持和喜爱。今天,Qoder 面向全球用户正式推出付费订阅计划,助力开发者开启高效流畅的编程之旅。
10952 2
|
存储 Kubernetes 调度
|
8月前
|
人工智能 自然语言处理 Java
Spring AI Alibaba实战:从0到1构建企业级智能应用
本文介绍了基于SpringAI Alibaba框架开发AI原生应用的实战指南。文章首先分析了SpringAI Alibaba作为SpringAI本土化版本的核心优势,包括深度适配阿里云生态、中文语境优化等特性。随后详细讲解了开发环境的搭建过程,包括JDK17、SpringBoot3.2.2等技术栈的配置。通过三个实战案例展示了核心功能实现:基础文本生成、结合MyBatisPlus的智能问答系统、以及流式响应和函数调用等高级特性。
6301 6
|
8月前
|
存储 人工智能 搜索推荐
不懂向量数据库?别怕!一文讲清8大主流工具,手把手教你做选择
向量数据库是AI应用的“超级记忆中枢”,能将文本、图像等转化为数学指纹并快速检索相似内容。本文通俗解析8大主流向量数据库,涵盖托管型、开源型与嵌入式三类,助你根据场景选型,轻松构建智能搜索、推荐系统与RAG应用。
5620 6

热门文章

最新文章