Изменение модели данных упрощает написание таких запросов. Если вы используете вершины и ребра для моделирования транспортных средств и времени вместо списков, сохраненных в качестве свойств, вы можете сделать что-то вроде этого.
g.addV('A').as('a').
addV('B').as('b').
addV('C').as('c').
addV('vehicle').as('v1').property('time',10).property('name','V1').
addV('vehicle').as('v2').property('time',8).property('name','V2').
addV('vehicle').as('v3').property('time',5).property('name','V3').
addV('vehicle').as('v4').property('time',6).property('name','V4').
addV('vehicle').as('v5').property('time',5).property('name','V5').
addV('vehicle').as('v6').property('time',6).property('name','V6').
addE('route').from('a').to('b').
addE('route').from('b').to('c').
addE('vehicle_info').from('a').to('v1').
addE('vehicle_info').from('a').to('v2').
addE('vehicle_info').from('b').to('v3').
addE('vehicle_info').from('b').to('v4').
addE('vehicle_info').from('c').to('v5').
addE('vehicle_info').from('c').to('v6').
iterate()
gremlin> g.V().hasLabel('A').
......1> repeat(out('route').simplePath()).
......2> until(hasLabel('C')).
......3> path().
......4> by(union(label(),out('vehicle_info').values('name','time').fold()).fold())
==>[[A,[V1,10,V2,8]],[B,[V3,5,V4,6]],[C,[V5,5,V6,6]]]
EDITED, чтобы добавить:
Вы можете фильтровать по время следующим образом:
gremlin> g.V().hasLabel('A').
......1> repeat(out('route').simplePath()).
......2> until(hasLabel('C')).
......3> path().
......4> by(union(label(),out('vehicle_info').has('time',between(5,10)).values('name','time').fold())
.fold())
==>[[A,[V2,8]],[B,[V3,5,V4,6]],[C,[V5,5,V6,6]]]