select('a')
кажется мне излишним - я думаю, что это можно удалить. Он выбирает выход, который уже является текущим выходом where()
, который уже является той вершиной на «а», что означает, что ваш обход должен быть:
g.V().hasLabel('schedule').
in().hasLabel('url').
dedup().
where(and(out().hasLabel('schedule').has('name','3'),
out().hasLabel('states').has('name', 'federal')))
Я полагаю, что дальнейшая оптимизация заключалась бы в том, чтобы сделать out()
перед and()
, чтобы вы проходили эти края только один раз:
g.V().hasLabel('schedule').
in().hasLabel('url').
dedup().
where(out().and(has('schedule','name','3'),
has('states', 'name', 'federal')))
Теперь ... это возвращает Vertex
, однако то, что вы имели, должно было также вернуть Vertex
. По крайней мере, в соответствии со спецификациями TinkerPop, при выполнении select()
для одной метки вы должны вернуть один объект. Однако, если вы сделаете несколько ярлыков, вы получите Map
. Вы можете увидеть это на TinkerGraph здесь:
gremlin> g.V().hasLabel('person').as('a').out().as('b').select('a')
==>v[1]
==>v[1]
==>v[1]
==>v[4]
==>v[4]
==>v[6]
gremlin> g.V().hasLabel('person').as('a').out().as('b').select('a','b')
==>[a:v[1],b:v[3]]
==>[a:v[1],b:v[2]]
==>[a:v[1],b:v[4]]
==>[a:v[4],b:v[5]]
==>[a:v[4],b:v[3]]
==>[a:v[6],b:v[3]]
Это заставляет меня задуматься, правильно ли учтен этот маленький нюанс в CosmosDB - если нет, то это технически "ошибка".