Не могли бы вы помочь мне написать запрос, который возвращает каждую исходную вершину в моем обходе вместе с соответствующими ребрами и вершинами в виде массивов на каждой такой исходной вершине? Короче говоря, мне нужен результирующий набор, содержащий массив из 3 кортежей, в котором элемент 1 каждого кортежа является исходной вершиной, а элементы 2 и 3 - ассоциированными массивами.
Спасибо!
РЕДАКТИРОВАТЬ1: Расширил данные графика и добавил мой текущий проблемный запрос. РЕДАКТИРОВАТЬ 2: Улучшенный пример кода графа Gremlin (извините, я не думал, что кто-нибудь на самом деле его запустит).
Пример графика
g.addV("blueprint").property("name","Mall").
addV("blueprint").property("name","HousingComplex").
addV("blueprint").property("name","Airfield").
addV("architect").property("name","Tom").
addV("architect").property("name","Jerry").
addV("architect").property("name","Sylvester").
addV("buildingCategory").property("name","Civil").
addV("buildingCategory").property("name","Commercial").
addV("buildingCategory").property("name","Industrial").
addV("buildingCategory").property("name","Military").
addV("buildingCategory").property("name","Resnameential").
V().has("name","Tom").addE("designed").to(V().has("name","HousingComplex")).
V().has("name","Tom").addE("assisted").to(V().has("name","Mall")).
V().has("name","Jerry").addE("designed").to(V().has("name","Airfield")).
V().has("name","Jerry").addE("assisted").to(V().has("name","HousingComplex")).
V().has("name","Sylvester").addE("designed").to(V().has("name","Mall")).
V().has("name","Sylvester").addE("assisted").to(V().has("name","Airfield")).
V().has("name","Sylvester").addE("assisted").to(V().has("name","HousingComplex")).
V().has("name","Mall").addE("classification").to(V().has("name","Commercial")).
V().has("name","HousingComplex").addE("classification").to(V().has("name","Resnameential")).
V().has("name","Airfield").addE("classification").to(V().has("name","Civil"))
Обратите внимание, что приведенное выше оченьупрощенный рендеринг наших данных.
Необходимые результаты запроса
Мне нужно вернуть каждую вершину светокопии в качестве основы с каждым из связанных с ней ребер / вершин в виде массивов.
Мое текущее решение
В настоящее время я делаю этот очень громоздкий запрос, который получает чертежи и назначает метку, получает архитекторов и назначает метку, а затем выбирает обе метки. Решение в порядке;тем не менее, это может привести к путанице, когда мне нужно добавить ребра или получить вершины классификации проекта (промышленные, военные, жилые, коммерческие и т. д.). По сути, чем больше связанных данных мне нужно получить для каждого проекта, тем медленнее становится мое решение.
Мой текущий запрос выглядит примерно так:
g.V().hasLabel("blueprint").as("blueprints").
outE().or(hasLabel("designed"),hasLabel("assisted")).inV().as("architects").
select("blueprints").coalesce(out("classification"),constant()).as("classifications").
select("blueprints","architects","classifications")
выше производит много дублирования. Если число: чертежей равно b, архитекторов - а, а классификаций - с, набор результатов содержит результаты b * a * c. Я хотел бы один план с массивом связанных с ним архитекторов и массивом связанных с ним классификаций, если таковые имеются.
Осложнения
Я пытаюсь сделать это в одном запросетак что я могу получить все данные проекта из графика, чтобы заполнить отфильтрованный список. Когда у меня есть список, включающий все вершины, ребра и их свойства, пользователи могут затем нажимать ссылки на большие двоичные объекты, просматривать сайты проектов и т. Д. Соответственно, у меня есть нумерация страниц, а также фильтрация, и я быЯ предпочитаю совершать одну поездку на сервер каждый раз, когда я получаю новую страницу или меняю фильтры.