22.局部操作local
22.1、说明
通过Gremlin进行图遍历通常是当前step处理前一step传递过来的对象流。很多操作是针对传递过来的对象流中的全部对象进行操作,但也有很多时候需要针对对象流中的单个对象而非对象流中的全部对象进行一些操作。这种对单个对象的局部操作,可以使用local()语句实现。
另外,有一些step默认的操作是针对对象流中的全部对象,但也可以通过参数来改变默认操作,允许针对对象流中的单个对象进行操作,包括count(),max(),mean(),min(),sum(),order(),tail(),limit(),range(),sample(),skip()和dedup()等。
22.2、实例说明
22.2.1、local的作用说明
是否使用local()
的区别可以参见如下示意图:
// 不使用local()
g.V().hasLabel('person').as('person')
.properties('age').order().by(value).limit(2)
.value().as('age')
.select('person','age').by('name').by()
// 使用local()
g.V().hasLabel('person').as('person')
.local(properties('age').order().by(value).limit(2))
.value().as('age')
.select('person','age').by('name').by()
22.2.2、以参数的形式指定局部操作
// 查询软件HugeGraph的属性Map
g.V().hasLabel('software').has('name', 'HugeGraph')
.propertyMap()
// 查询软件HugeGraph的属性个数
g.V().hasLabel('software').has('name', 'HugeGraph')
.propertyMap().count(local)
// 数目最多的顶点类型的顶点数目
g.V().groupCount().by(label).select(values).max(local)
min()
、mean()
、sum()
等与max()
使用local参数的方法基本一致,不再赘述
// 所有顶点的属性列表中的第一个属性
g.V().valueMap().limit(local, 1)
tail()
、range()
、skip()
与limit()
使用local参数的方法基本一致,不再赘述
// 所有顶点一步邻居中所有的software
g.V().both().group().by(label).select('software').dedup(local)
// 所有顶点按类型计数并按数目由多到少排序
g.V().groupCount().by(label).order(local).by(values, decr)
// 所有顶点作为一个集合,从中采样2个
g.V().fold().sample(local,2)