Вы определенно можете упростить свой подход. Я не думаю, что вам нужны метки шагов и select()
для того, что вы делаете, и это хорошо, потому что они увеличивают стоимость вашего обхода. Я попытался переписать первый предоставленный вами обход, и я надеюсь, что у меня правильная логика, но, несмотря на это, я думаю, вы получите представление о том, что вам нужно сделать, когда увидите изменение:
g.V().hasLabel('schedule').in().hasLabel('url').
where(and(out().hasLabel('schedule').has('name', '3'),
out().hasLabel('states').has('name', 'federal')))
У вас уже есть «родительский элемент», который вы хотите вернуть в первой строке, поэтому просто сделайте фильтр с помощью where()
и добавьте туда свою логику фильтрации, чтобы перейти от каждого из этих «родителей».