Gremlin:groupCount 之后的除法
Gremlin: division after groupCount
我正在使用 Gremlin 查询 Neptune。
我有 2 个计数
- g.V().hasLabel(*).outE.inV().groupCount().by('name')
结果就像:'a':2, 'b':4
- g.V().hasLabel(*).count()
4
如何编写单个查询来获取结果 1 除以结果 2 的数字?即 'a': 0.5, 'b': 1
我能想到几种方法,但我想使用 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)它不依赖于返回结果的顺序union()
):
gremlin> g.V().
......1> groupCount('a').
......2> by(constant('c')).
......3> out().
......4> groupCount('b').
......5> by(label).
......6> cap('a','b').as('x').
......7> select('a').select('c').as('c').
......8> select('x').select('b').unfold().
......9> group().
.....10> by(keys).
.....11> by(select(values).math('_/c'))
==>[software:0.6666666666666666,person:0.3333333333333333]
我正在使用 Gremlin 查询 Neptune。
我有 2 个计数
- g.V().hasLabel(*).outE.inV().groupCount().by('name') 结果就像:'a':2, 'b':4
- g.V().hasLabel(*).count() 4
如何编写单个查询来获取结果 1 除以结果 2 的数字?即 'a': 0.5, 'b': 1
我能想到几种方法,但我想使用 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)它不依赖于返回结果的顺序union()
):
gremlin> g.V().
......1> groupCount('a').
......2> by(constant('c')).
......3> out().
......4> groupCount('b').
......5> by(label).
......6> cap('a','b').as('x').
......7> select('a').select('c').as('c').
......8> select('x').select('b').unfold().
......9> group().
.....10> by(keys).
.....11> by(select(values).math('_/c'))
==>[software:0.6666666666666666,person:0.3333333333333333]