Как получить [ab] в качестве выходных данных, когда я передаю a, b, используя значения (a, b) в том же порядке? - PullRequest
0 голосов
/ 11 июня 2019

Я использую консоль gremlin, чтобы проверить, работает мой запрос или нет.Я могу получить необходимые данные, но в обратном порядке.В конце моего запроса я использую

    values.('id','name').fold()

Но вывод, который я получаю, - [name id].Как получить вывод как [id name]?Спасибо.

1 Ответ

0 голосов
/ 11 июня 2019

Gremlin обычно ничего не делает для сохранения порядка и полагается на порядок, предоставляемый базовой базой данных графа.Если вам нужен заказ, то вам нужно указать порядок каким-либо образом.Я думаю, что вы могли бы использовать union() для этого:

gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1).union(values('name'),values('age')).fold()
==>[marko,29]
gremlin> g.V(1).union(values('age'),values('name')).fold()
==>[29,marko]

Хотя я не уверен, стоит ли полагаться на union().Как TinkerGraph должен уважать порядок, указанный там, но я не уверен, будут ли другие графики.Возможно, лучшим решением было бы явное указание с помощью order():

gremlin> g.V(1).properties('name','age').order().by(key).value()
==>29
==>marko

Это сортировка по ключам в алфавитном порядке, а не в порядке их ввода.В конечном счете, хотя, если вы просто проверяете результаты, было бы лучше просто вернуть Map с project()

gremlin> g.V(1).project('name','age').by('name').by('age')
==>[name:marko,age:29]
gremlin> g.V(1).project('age','name').by('age').by('name')
==>[age:29,name:marko]
gremlin> g.V(1).project('age','name').by('age').by('name').next().getClass()
==>class java.util.LinkedHashMap

Как вы можете видеть project() сохраняет order(), так как он использует LinkedHashMap и выполняет модуляторы by() в порядке их определения.Что приятно, так это то, что вы действительно хотели, чтобы форму List, о которой вы спрашивали в своем первоначальном вопросе, вы могли просто получить значения из Map:

gremlin> g.V(1).project('name','age').by('name').by('age').select(values)
==>[marko,29]
gremlin> g.V(1).project('age','name').by('age').by('name').select(values)
==>[29,marko]

Надеюсь, один из этих подходов сработаетдля вашей ситуации.

...