Команда MATCH, использующая $ currentMatch в WHILE, чтобы остановить обход - PullRequest
0 голосов
/ 24 мая 2018

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

Чтобы уточнить, у меня есть следующие настройки:

Настройка графика

Моя цель - выполнить следующий запрос:

Для стены, дайте мне все связанные / глубокие свойства этой стены, которые являются частьютот же коммит, что и у стены, но только если полный путь от свойства к стене является частью коммита

Это означает, что, начиная с коммита № 21: 0, я перехожу к стене № 30: 0, для которого я должен получить 0 свойств (обратите внимание, что свойство # 34: 0 не связано с коммитом # 21: 0!), а начиная с коммита # 22: 0, перейдет к стене # 29: 0, для чего я долженполучить все 4 свойства.По сути, я хочу прекратить обход MATCH всякий раз, когда ударил узел, который не подключен к указанному узлу фиксации.

Я пробовал команду MATCH, с проверкой while, в которой я проверяюесли есть shortestPath от коммита до $currentMatch.Однако, это не похоже на работу, я получаю сообщение об ошибке, что Vertex ID не может быть NULL.

Мой запрос выглядит так:

select expand(ret) from (
    MATCH {class: V, as: commit, where:(@rid = #21:0)},
    {as: commit}.out("commitlink"){as: wall, where:(@class INSTANCEOF "Wall")},
    {as: wall}.out("E"){as: props, where:(@class = "Property"), while:(shortestPath($matched.commit, $currentMatch, "OUT","commitlink").size() > 0)}
  return items as ret)

... но обратите внимание, что этот запрос даетошибка «Идентификатор вершины не может быть пустым».

Кажется, я неправильно понимаю наличие $currentMatch в while части команды.

РЕДАКТИРОВАТЬ: Это, кажется, делаетjob:

select expand($properties) LET 
$commit = (SELECT FROM #22:0),
$wall = (SELECT FROM (SELECT expand(out("commitlink")) FROM $commit) WHERE 
@class INSTANCEOF "Wall"),
$properties = (SELECT FROM (TRAVERSE OUT("E") FROM $wall WHILE (shortestPath($commit, @rid, "OUT", "commitlink").size() > 0)) WHERE @class INSTANCEOF "Property")

Но есть ли недостаток в использовании обходных запросов вместо MATCH?

1 Ответ

0 голосов
/ 24 мая 2018

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

Если это то, что вы хотите, попробуйте это:

MATCH {class: Property, as: props}.in("commitlink"){as: commit, where:(@rid = #19:0)} return props

это моя схема:

enter image description here

это результат:

enter image description here

Обручать это помогает

С уважением

...