3

我正在尝试使用单个 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所以我的问题是,如何totalWithEdgeB在第三个by()语句中访问这些值?还是我对这一切都错了?

4

1 回答 1

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]
于 2017-08-23T14:11:57.440 回答