第21期 Gremlin Steps:
local()
、count()
、max()
、mean()
、min()
、sum()
、order()
、tail()
、limit()
、range()
、sample()
、skip()
、limit()
、dedup()
本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境,本文示例均以其中的“TinkerPop关系图”为初始数据。
上一期:深入学习Gremlin(20):遍历栅栏barrier
local
说明
通过Gremlin进行图遍历通常是当前step处理前一step传递过来的对象流。很多操作是针对传递过来的对象流中的全部对象进行操作,但也有很多时候需要针对对象流中的单个对象而非对象流中的全部对象进行一些操作。这种对单个对象的局部操作,可以使用local()
语句实现。
另外,有一些step默认的操作是针对对象流中的全部对象,但也可以通过参数来改变默认操作,允许针对对象流中的单个对象进行操作,包括count()
,max()
,mean()
,min()
,sum()
,order()
,tail()
,limit()
,range()
,sample()
,skip()
和dedup()
等。
实例说明
1. local的作用说明
是否使用local()
的区别可以参见如下示意图:
实例1:
// 不使用local()
g.V().hasLabel('person').as('person')
.properties('age').order().by(value).limit(2)
.value().as('age')
.select('person','age').by('name').by()
实例2:
// 使用local()
g.V().hasLabel('person').as('person')
.local(properties('age').order().by(value).limit(2))
.value().as('age')
.select('person','age').by('name').by()
为了跟TinkerPop官网的示意图配合,例子中的”age“属性只有一个,使用
order().by().limit(2)
有些多余
2. 以参数的形式指定局部操作
实例1 count()
:
// 查询软件HugeGraph的属性Map
g.V().hasLabel('software').has('name', 'HugeGraph')
.propertyMap()
// 查询软件HugeGraph的属性个数
g.V().hasLabel('software').has('name', 'HugeGraph')
.propertyMap().count(local)
试一下不加
local
结果是什么
实例2 max()
、min()
、mean()
、sum()
:
// 数目最多的顶点类型的顶点数目
g.V().groupCount().by(label).select(values).max(local)
min()
、mean()
、sum()
等与max()
使用local参数的方法基本一致,不再赘述
试一下不加
local
结果是什么
实例3 limit()
、tail()
、range()
、skip()
:
// 所有顶点的属性列表中的第一个属性
g.V().valueMap().limit(local, 1)
tail()
、range()
、skip()
与limit()
使用local参数的方法基本一致,不再赘述
试一下不加
local
结果是什么
实例4 dedup()
:
// 所有顶点一步邻居中所有的software
g.V().both().group().by(label).select('software').dedup(local)
试一下不加
local
结果是什么
实例5 order()
:
// 所有顶点按类型计数并按数目由多到少排序
g.V().groupCount().by(label).order(local).by(values, decr)
实例6 sample()
:
// 所有顶点作为一个集合,从中采样2个
g.V().fold().sample(local,2)
上一期:深入学习Gremlin(20):遍历栅栏barrier
下一期:深入学习Gremlin(22):遍历终止terminal