gremlin语言介绍六:查询结果处理
2020-07-05 本文已影响0人
生饼
0 打开一个新的图库
本节的命令使用的测试数据是tinkerpop官方提供的Modern图库,使用以下命令可以加载tinkerpop modern图库,它包含6个vertex和6条edge
$ ./bin/gremlin.sh
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin>
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
image.png
1 返回traversal的结果
我们前面有些查询语句(比如g.V().hasLabel('Person')
)结尾依然是一个traversal step,之所以输入回车后能在console中看到查询到的结果,是因为gremlin traversal machine在末尾自动添加了iterator()这个terminal step。
1.1 hasNext
是否有对象,返回true或false
gremlin> g.V().out('created').hasNext()
==>true
1.2 next
# 返回一个对象
gremlin> g.V().out('created').next()
==>v[3]
# 返回两个对象
gremlin> g.V().out('created').next(2)
==>v[3]
==>v[5]
1.3 toList、toSet、toBulkSet
所有的结果放在列表、集合、buldset中返回
1.4 iterate
迭代所有的结果返回
2 筛选和排序
2.1 dedup
去重
gremlin> g.V().values('lang')
==>java
==>java
gremlin> g.V().values('lang').dedup()
==>java
2.2 limit
返回前2个对象
gremlin> g.V().limit(2)
==>v[1]
==>v[2]
2.3 range
返回指定范围的对象
gremlin> g.V().range(0,3)
==>v[1]
==>v[2]
==>v[3]
gremlin> g.V().range(1,3)
==>v[2]
==>v[3]
gremlin> g.V().range(1, -1)
==>v[2]
==>v[3]
==>v[4]
==>v[5]
==>v[6]
2.4 skip
除了前面n个对象,返回后面所有的对象
2.5 tail
返回尾部的n个对象
gremlin> g.V().values('name').order()
==>josh
==>lop
==>marko
==>Peter
==>ripple
==>vadas
# 返回最后一个
gremlin> g.V().values('name').order().tail()
==>vadas
# 返回最后一个
gremlin> g.V().values('name').order().tail(1)
==>vadas
gremlin> g.V().values('name').order().tail(3)
==>Peter
==>ripple
==>vadas
2.6 order
对结果进行排序
支持的排序方式:升序(asc)、降序(desc)、打乱顺序(shuffle)
# 默认升序排序
gremlin> g.V().values('name').order()
==>josh
==>lop
==>marko
==>Peter
==>ripple
==>vadas
# 降序排列
gremlin> g.V().values('name').order().by(desc)
==>vadas
==>ripple
==>Peter
==>marko
==>lop
==>josh
# 根据对象的某个属性值排序
gremlin> g.V().hasLabel('person').order().by('age', asc).values('name')
==>vadas
==>marko
==>josh
==>Peter
3 结果统计
gremlin> g.V().count()
==>6
gremlin> g.V().values('age').max()
==>35
gremlin> g.V().values('age').mean()
==>30.75
gremlin> g.V().values('age').min()
==>27
gremlin> g.V().as('a').out('knows').as('b').math('a + b').by('age')
==>56.0
==>61.0