格林姆林:groupCount之后的除法

时间:2019-05-23 20:12:50

标签: gremlin graphdb

我正在使用Gremlin查询海王星。

我有2个计数

  1. g.V()。hasLabel(*)。outE.inV()。groupCount()。by('name') 结果就像:'a':2,'b':4
  2. g.V()。hasLabel(*)。count() 4

如何编写单个查询以获取结果1除以结果2的数字?即'a':0.5,'b':1

1 个答案:

答案 0 :(得分:2)

我可以考虑几种方法,但是我想使用match()是最简单的:

g.V().hasLabel(*).
  union(count(),
        out().groupCount().by('name')).fold().
  match(__.as('values').limit(local, 1).as('c'),
        __.as('values').tail(local, 1).unfold().as('kv'),
        __.as('kv').select(values).math('_/c').as('v')).
  group().
    by(select('kv').by(keys)).
    by(select('v'))

对现代图形的类似查询:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().union(count(),
......1>             out().groupCount().by(label)).fold().
......2>   match(__.as('values').limit(local, 1).as('c'),
......3>         __.as('values').tail(local, 1).unfold().as('kv'),
......4>         __.as('kv').select(values).math('_/c').as('v')).
......5>   group().
......6>     by(select('kv').by(keys)).
......7>     by(select('v'))
==>[software:0.6666666666666666,person:0.3333333333333333]

下一个可能很难理解,但是会是我个人的最爱(因为a)我不喜欢match()和b)它不依赖于{{ 1}}):

union()