Я хочу пройти по графику с помощью сопоставления, но прекратить обход, когда определенный узел не подключен к другому конкретному узлу.
Чтобы уточнить, у меня есть следующие настройки:
Настройка графика
Моя цель - выполнить следующий запрос:
Для стены, дайте мне все связанные / глубокие свойства этой стены, которые являются частьютот же коммит, что и у стены, но только если полный путь от свойства к стене является частью коммита
Это означает, что, начиная с коммита № 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?