Я пытаюсь использовать один запрос 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()
выражении? Или я все неправильно делаю?