Apache Tinkerpop Gremlin возвращает результаты запроса, используя Select Values ​​As - PullRequest
0 голосов
/ 13 января 2019

У меня есть запрос, который работает для меня, как ожидалось.

g.V().or(hasLabel("poi"),hasLabel("business")).as("dest")
.outE().inV().hasLabel("region").as("reg")
.select("dest").values("name").as("dest_name")
.select("dest").values("budget").as("dest_budget")
.select("reg").values("name").as("reg_name")
.select("reg_name","dest_name","dest_budget")

Этот запрос дает этот результат.

enter image description here

Как я и ожидал. Однако мне нужно получить больше свойств из «места назначения», мне нужно получить больше 10 свойств. Это превратит меня в нечто подобное

g.V().or(hasLabel("poi"),hasLabel("business")).as("dest")
.outE().inV().hasLabel("region").as("reg")
.select("dest").values("name").as("dest_name")
.select("dest").values("budget").as("dest_budget")
.select("dest").values("property3").as("property3")
.select("dest").values("property4").as("property4")
//insert more queries like from the above
.select("reg").values("name").as("reg_name")
.select("reg_name","dest_name","dest_budget","property3","property4")

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

g.V().
or(hasLabel("poi"),hasLabel("business"))
.as("destination")
.outE().inV().as("region")
.select("destination").values("name","budget").as("dest_name","dest_budget")
.select("region").values("name").as("reg_name")
.select("dest_name","reg_name","dest_budget")

Однако я был удивлен этим результатом. Чего я не ожидал.

enter image description here

Насколько я понимаю, имена в значениях будут сопоставляться с каждым значением, переданным в шаге as. Я ошибся?

Можно ли как-нибудь получить результат с первого снимка экрана, не написав длинного запроса?

1 Ответ

0 голосов
/ 13 января 2019

as() обозначает шаг, а не значения внутри этого шага. Итак, сделав:

.select("destination").values("name","budget").as("dest_name","dest_budget")

Вы просто называете шаг values() дважды. Я думаю, что вы можете существенно упростить этот обход для того, что вы хотите получить в результате, и это не включает в себя объединение множества select() шагов:

g.V().or(hasLabel("poi"),hasLabel("business")).
  project('dest_name','dest_budget','reg_name').
    by('name').
    by('budget').
    by(out().hasLabel("region").values('name').fold())

Вы получите немного другую структуру, в которой «reg_name» будет представлять собой список всех имен регионов, а не иметь сплющенную структуру, но вы можете развернуть то, что я себе представляю, если это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...