При отладке Gremlin вам иногда нужно удалить какой-то шаг, чтобы вы оглянулись назад на то, что возвращается из более ранних частей конвейера.Обратите внимание, что возвращает первая часть вашего обхода:
gremlin> g.V().as("a").
......1> V().as("b")
==>v[0]
==>v[2]
==>v[5]
==>v[0]
==>v[2]
==>v[5]
==>v[0]
==>v[2]
==>v[5]
Вы можете понять, почему у вас получилось намного больше ребер, которые вы хотели бы получить.Я начал отфильтровывать некоторые из них следующим образом:
gremlin> g.V().has('x').as('a').
......1> V().has('y').as('b').
......2> where('a',neq('b'))
==>v[2]
==>v[5]
==>v[5]
==>v[2]
Вы заботитесь только о вершинах, у которых есть свойство "x" для "a" и свойство "y" для "b", а так как вы неЕсли вы хотите, чтобы эти вершины совпадали друг с другом, вы также хотите отменить их с помощью where('a',neq('b'))
.
. Отсюда оставшееся предложение where()
очень похоже на предложение в вопросе, на который вы ссылались:
gremlin> g.V().has('x').as('a').
......1> V().has('y').as('b').
......2> where('a', neq('b')).
......3> where('a', eq('b')).by('x').by('y').
......4> addE('link').from('a').to('b')
==>e[8][0-link->2]
==>e[9][2-link->5]
таким образом:
gremlin> g.V().has('x','1').outE('link').inV().outE('link').inV().path().by('x').by(label)
==>[1,link,2,link,3]