Gremlin- Как рассчитать процент вершин с определенным свойством
Я пытаюсь использовать один запрос 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()
заявление? Или я все об этом говорю не так?
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]