gremlin基础语法

环境

采用apache-tinkerpop-console 3.2.11,可以在官网下载到

先建立一个空的图数据库(内存)

1
g = TinkerGraph.open().traversal()

基础

一共有5种通用的单步(general-step)

一般来说, 每一个单步接受一个遍历对象,返回执行后的遍历对象结果,所以下一个单步操作同样使用这个遍历结果,再次返回一个遍历结果。 这样图的遍历过程就能如流式接口, 幺半群运算这样的方式持续进行下去。 但是,有一些单步操作不返回遍历对象,而是执行遍历并返回一个结果(类型不同或者不可迭代,所以遍历没法继续,从而终止)。 这些特殊的单步游就叫做 结束性单步

语法

增加顶点

addV可以添加顶点,配合property还可以设置属性

1
2
3
g.addV('student').property('name','张三')
g.addV('student').property('name','李四')
g.addV('teacher').property('name','王五')

根据属性查找顶点

1
2
g.V().has('name','张三')
g.V().hasLabel('student').has('name','李四')

has可以按照某个属性值过滤,hasLabel可以根据label过滤

增加边

1
2
g.V().has('name','王五').addE('teach').to(V().has('name','张三')).property('level',1)
g.V().has('name','王五').addE('teach').to(V().has('name','李四')).property('level',2)

使用has过滤出需要增加边的两端,然后使用addE 和to来增加边,配上property可以增加属性

增加修改属性

1
g.V().has('name','张三').property('age',15).property('gender','男')

property返回之前操作的对象而不是新增加的属性,所以可以连续设置,已有的属性会覆盖修改。

给边增加属性也是一样的,但需要先找到边

1
g.V().has('name','王五').outE('teach').as('a').inV().where(has('name','张三')).select('a')

通过outE(标签)来过滤指定标签的边,再根据inV和where 过滤入口顶点,因为我们需要边,所以用as来标记边

接着用property设置属性就可以了

1
g.V().has('name','王五').outE('teach').as('a').inV().where(has('name','张三')).select('a').property('subject','语文')

多路劲查询

查询教张三的老师还教了谁?

1
g.V().has('name','张三').inE('teach').outV().hasLabel('teacher').outE('teach').inV().hasLabel('student')

也可以使用values(属性名)来提取属性值

删除

drop 可以删除属性、边、顶点

1
2
3
g.V().has('name','张三').properties('age').drop()
g.E().drop()
g.V().drop()