Что-то в вашем обходе кажется неверным. Для начала hasLabel()
выглядит так, как будто его вызывают с аргументами, которые не являются метками. Я предполагаю, что обход должен быть:
g.V().has('RiskLibrary', 'name', 'General Business').has('active', '1').as('lib').
select('lib').
outE('CONTAINS_RISK').
select('lib').
project('Risk Library', 'Risks').
by('name').
by(out('CONTAINS_RISK').
project('Name', 'Description', 'Impacts', 'Causes').
by('name').
by('description').
by(both('IMPACTS').
project('name').by('name').
fold()).
by(both('CAUSES').
project('name').by('name').
fold()).
fold())
Если это правильно, то я бы удивился, какова цель обхода точно. Как сейчас, я бы ожидал, что он будет project('Risk Library', 'Risks')
для каждого outE('CONTAINS_RISK')
. Для каждого из этих ребер вы получите тот же результат, что и у вас select('lib')
, который захватывает оригинал Vertex
, из которого вы прошли. Если вы этого не планируете, вы можете представить себе значительную стоимость запроса для выполнения огромного project('Risk Library', 'Risks')
снова и снова.
Предполагая, что остальная часть вашего обхода верна, я думаю, вам просто нужно избавиться от метки шага as('lib')
и строк до project('Risk Library', 'Risks')
, таким образом:
g.V().has('RiskLibrary', 'name', 'General Business').has('active', '1').
project('Risk Library', 'Risks').
by('name').
by(out('CONTAINS_RISK').
project('Name', 'Description', 'Impacts', 'Causes').
by('name').
by('description').
by(both('IMPACTS').
project('name').by('name').
fold()).
by(both('CAUSES').
project('name').by('name').
fold()).
fold())
Тем не менее, это может быть дорогостоящим обходом в зависимости от того, сколько «ВЛИЯЕТ» и Ребра «CAUSES» существуют для каждой противоположной вершины ребра «CONTAINS_RISK».