Когда вы задаете вопросы о Gremlin, картинка может быть полезной, но гораздо важнее предоставить сценарий Gremlin, который создает некоторые примеры данных, например:
g.addV().property(id,1).as('1').
addV().property(id,2).as('2').
addV().property(id,3).as('3').
addV().property(id,4).as('4').
addV().property(id,5).as('5').
addE('link').from('1').to('3').
addE('link').from('2').to('3').
addE('link').from('2').to('4').
addE('link').from('3').to('5').
addE('link').from('4').to('5').iterate()
В ответ на ваш вопрос, я думаю, вам просто нужно использовать шаг path()
, чтобы показать, куда Гремлин прошел:
gremlin> g.V().repeat(out()).emit().path()
==>[v[1],v[3]]
==>[v[1],v[3],v[5]]
==>[v[2],v[3]]
==>[v[2],v[4]]
==>[v[2],v[3],v[5]]
==>[v[2],v[4],v[5]]
==>[v[3],v[5]]
==>[v[4],v[5]]
Если вас интересуют пути между вершинами 1/2 и 5, вы можете добавить некоторые ограничения:
gremlin> g.V(1,2).repeat(out()).emit(hasId(5)).path()
==>[v[1],v[3],v[5]]
==>[v[2],v[3],v[5]]
==>[v[2],v[4],v[5]]
Опираясь на это далее, если вы хотите посчитать вершины в середине пути, то вы можете unfold()
пути, отфильтровать ваши начальные / конечные вершины и count()
:
gremlin> g.V(2).
......1> repeat(out()).
......2> emit(hasId(5)).
......3> path().
......4> unfold().
......5> not(hasId(2,5)).
......6> dedup().
......7> count()
==>2
Надеюсь, это вдохновит вас. В Gremlin Recipes .
есть много хороших примеров.