Gremlin Query - повторите с условиями на краях - PullRequest
0 голосов
/ 28 октября 2018

У меня есть структура грамм гремлина в сети поездов.Вершины - это станции с идентификатором и именем станции в качестве свойств.Края - это трассы с маршрутом, км и последовательностью остановок.

Существует около 840 остановок и 24 маршрута, соединяющих их.Как мы можем себе представить, эти остановки связаны маршрутами, и любые две остановки могут быть связаны более чем одним маршрутом.Также есть циклические маршруты, то есть запуск и остановка на одной и той же остановке.Некоторые остановки являются как отправителями, так и пунктами назначения различных маршрутов.

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

Кажется, что это простой вопрос, но я не знаю гремлина, чтобы ответить на него.:)

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

Идеальная ситуация, учитывая станцию, дать все затронутые маршруты, с маршрутом до конечного пункта назначения и маршрутами от источника.

Мне не удалось соединить вершины на основе свойства ребер.Как соединить вершины на основе маршрута без указания значения.Кроме того, завершение повтора на листовом узле.т.е. нет дальнейших направлений для подключения.Если бы я мог удалить пока hasID, это было бы победой.:)

g.V().has("id", "17892")
     .repeat(outE().has("route","3-96-mjp-1").inV())
     .until(hasId("6147"))
     .path()

Пример структуры ниже:

g.V().has("id", "17892").outE().path() -->>  "objects": [
  {
    "id": "17892",
    "label": "stop",
    "type": "vertex",
    "properties": {
      "stop_id": [
        {
          "id": "f2eb562e-e362-427c-91ef-02769cfda721",
          "value": "17892"
        }
      ],
      "stop_name": [
        {
          "id": "b873d980-8d07-44e7-aa45-5be1afad4a63",
          "value": "10-Albert St/Nicholson St (East Melbourne)"
        }
      ]
    }
  },
  {
    "id": "242fa97f-134d-439a-b8ab-0b4d8b8da9bc",
    "label": "nextStop",
    "type": "edge",
    "inVLabel": "stop",
    "outVLabel": "stop",
    "inV": "17893",
    "outV": "17892",
    "properties": {
      "distance": 125,
      "route": "3-35-mjp-1",
      "stopSeq": 17
    }
  }
]

Я делаю это в Azure CosmosDB Graph.

1 Ответ

0 голосов
/ 29 октября 2018

Без примера графика я просто пытаюсь сделать правильное предположение:

g.V().has("id", "17892").
  bothE("nextStop").as("e").outV().
  until(__.not(inE("nextStop").
                 where(eq("e")).by("route").
                 where(lt("e")).by("stopSeq"))).
    repeat(inE("nextStop").
             where(eq("e")).by("route").
             where(lt("e")).by("stopSeq").as("e").outV()).as("origin").
  outE("nextStop").as("e").inV().
  until(__.not(outE("nextStop").
                 where(eq("e")).by("route").
                 where(gt("e")).by("stopSeq"))).
    repeat(outE("nextStop").
             where(eq("e")).by("route").
             where(gt("e")).by("stopSeq").as("e").inV()).
  path().
    from("origin").
    by("stop_id").
    by("distance")

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

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