2017-02-17 7 views
3

特定の述語を満たす頂点の割合を1つのgremlinクエリで調べようとしていますが、計算された値の格納と伝播に問題があります。Gremlin-特定のプロパティを持つ頂点のパーセンテージを計算する方法

私は、ラベル "B"の出て行くエッジを持つラベル "A"を持つすべての頂点のパーセンテージを計算したいとします。私は、同じクエリに「B」のラベルでラベル「A」と頂点の数、同様の発信エッジと頂点の数をプリントアウトすることができます。

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()) 

これは私の2つの関連の値が得られます。 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) 

だから私の質問は、私は第三by()文で値totalAtotalWithEdgeBにアクセスする方法を、次のとおりです。

は理想的には、私はこのような何かをしたいですか?それとも私はこれについて間違っているのだろうか?

答えて

1

私はいくつかの簡単な計算を使用します。現代のグラフを使用して、createdのエッジを持つすべてのperson頂点を見つけます:

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] 
関連する問題