Gremlin-如何计算具有特定属性的顶点百分比

时间:2017-02-17 01:41:43

标签: gremlin graph-traversal datastax-studio

我试图使用单个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())

这为我提供了两个相关值:totalwithEdgeB。如何使用这些值进行传播和计算?

理想情况下,我想要这样的事情:

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声明中访问值totalWithEdgeBby()?或者我这样做是错的?

1 个答案:

答案 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]