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]
Другие вопросы по тегам