美文网首页
gremlin语言介绍十:聚合查询

gremlin语言介绍十:聚合查询

作者: 生饼 | 来源:发表于2020-07-05 03:15 被阅读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 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]]
    

    相关文章

      网友评论

          本文标题:gremlin语言介绍十:聚合查询

          本文链接:https://www.haomeiwen.com/subject/hvemqktx.html