我试图使用单个gremlin查询来确定满足某个谓词的顶点的百分比,但是我在存储和传播计算值时遇到了麻烦。
假设我想用标签计算所有顶点的百分比" A"具有带标签" B"的传出边缘。我可以打印出带有标签" A"的顶点数量,以及带有带标签的出口边缘的顶点数量" B"在同一个查询中:
g.V().limit(1).project("total","withEdgeB")
.by(g.V().hasLabel("A").count())
.by(g.V().hasLabel("A").match(__.as("a").outE("B").inV()).dedup().count())
这为我提供了两个相关值:total
和withEdgeB
。如何使用这些值进行传播和计算?
理想情况下,我想要这样的事情:
g.V().limit(1).project("total","withEdgeB","percentage")
.by(g.V().hasLabel("A").count().as("totalA"))
.by(g.V().hasLabel("A").match(__.as("a").outE("B").inV()).dedup().count().as("totalWithEdgeB"))
.by(totalWithEdgeB / totalA)
所以我的问题是,如何在第三个totalA
声明中访问值totalWithEdgeB
和by()
?或者我这样做是错的?
答案 0 :(得分:1)
我会使用一些简单的计算。使用现代图表,找到所有person
个带有传出created
边的顶点:
gremlin> g.V().hasLabel('person').
choose(outE('created'),
constant(1),
constant(0)).fold().
project('total','withCreated','percentage').
by(count(local)).
by(sum(local)).
by(mean(local))
==>[total:4,withCreated:3,percentage:0.75]