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 group
聚合操作,通过by()指定聚合的key
根据vertex的label进行聚合
gremlin> g.V().group().by(label)
==>[software:[v[3],v[5]],person:[v[1],v[2],v[4],v[6]]]
同时通过by指定聚合的内容
gremlin> g.V().group().by(label).by('name')
==>[software:[lop,ripple],person:[marko,vadas,josh,peter]]
gremlin> g.V().group().by(label).by(count())
==>[software:2,person:4]
2 groupCount
计算每个聚合key聚合的元素的个数
gremlin> g.V().groupCount().by(label)
==>[software:2,person:4]
# 上面的语句等价与下面这个语句
gremlin> g.V().group().by(label).by(count())
==>[software:2,person:4]
gremlin>
3 fold/unfold
fold()将流聚合为一个list。unfold则执行相反的功能
gremlin> g.V(1).out('knows').values('name').fold()
==>[vadas,josh]
下面的例子可以清晰的说明fold的功能。不使用fold,流中有2个元素。fold后流中只有一个元素了,它是一个list。这个list中有2个元素
gremlin> g.V(1).out('knows').values('name').count()
==>2
gremlin> g.V(1).out('knows').values('name').fold().count()
==>1
gremlin> g.V(1).out('knows').values('name').fold().count(local)
==>2
通过fold执行聚合计算
gremlin> g.V(1).out('knows').values('name').fold(0) {a,b -> a + b.length()}
==>9
gremlin> g.V().values('age').fold(0) {a,b -> a + b}
==>123
gremlin> g.V().values('age').fold(0, sum)
==>123
gremlin> g.V().values('age').sum()
==>123
4 union
将多个traversal的结果合并输出
gremlin> g.V(4).union(
__.in().values('age'),
out().values('lang'))
==>29
==>java
==>java
gremlin> g.V(4).union(
__.in().values('age'),
out().values('lang')).path()
==>[v[4],v[1],29]
==>[v[4],v[5],java]
==>[v[4],v[3],java]
4 cap
收集traversal中的sideEffect内容
gremlin> g.V().groupCount('a').by(label).cap('a') //1\
==>[software:2,person:4]
gremlin> g.V().groupCount('a').by(label).groupCount('b').by(outE().count()).cap('a','b') //2\
==>[a:[software:2,person:4],b:[0:3,1:1,2:1,3:1]]
网友评论