2017-02-17 3 views
3

Ich versuche, eine einzelne Gremlin-Abfrage verwenden, um den Prozentsatz der Scheitelpunkte zu bestimmen, die ein bestimmtes Prädikat erfüllen, aber ich habe Probleme beim Speichern und propagieren der berechneten Werte.Gremlin- ​​Wie Prozent der Scheitelpunkte mit einer bestimmten Eigenschaft zu berechnen

Angenommen, ich möchte den Prozentsatz aller Scheitelpunkte mit der Bezeichnung "A" berechnen, die eine ausgehende Kante mit der Bezeichnung "B" haben. Ich kann in der gleichen Abfrage aus der Anzahl der Ecken mit dem Label „A“, ein auch die Anzahl der Ecken mit einer abgehenden Kante mit dem Label „B“ drucken:

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

Das mir die beide relevanten Werte gibt: total und withEdgeB. Wie propagiere und berechne ich mit diesen Werten?

Idealerweise möchte ich etwas wie folgt aus:

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) 

Also meine Frage ist, wie kann ich die Werte zugreifen totalA und totalWithEdgeB in der dritten by() Aussage? Oder mache ich das alles falsch?

Antwort

1

Ich würde einige einfache Berechnungen verwenden. Unter Verwendung des modernen Graphen finden Sie alle person Scheitelpunkte mit abgehenden created Kanten:

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] 
Verwandte Themen