Обход ArangoDB с условиями на соседей вершины - PullRequest
0 голосов
/ 13 мая 2019

У меня есть следующий график: enter image description here

Я хотел бы написать запрос AQL, который возвращает пути, начиная с узла Q1, в котором второй узелв пути есть сосед P6 (соседи начального узла Q1 всегда имеют P-узел (P6, P4, ..) в своей окрестности).

Например, хорошими путями являются: Q1->Q1-P6-3->STRING-2, Q1->Q1-P6-3->Q1-P6-3-QUAL-P2-2->QUANT-2 и т. Д. Как лучше всего проверить условие?Сейчас я добавил к таким узлам, как Q1-P6-3 атрибут property с ключом P-узла из его окрестности и просто отфильтровал пути:

FILTER p.vertices[1].property == 'P6'

Но я считаю, что есть умнееспособ сделать это.Заранее спасибо!

1 Ответ

1 голос
/ 14 мая 2019

AQL сначала получает список всех узлов, для которых P6 является прямым соседом, а затем использует его для фильтрации путей в запросе обхода. Таким образом, вам не нужно отслеживать свойство в вершинах:

LET p6Neighbors = (FOR t IN testEdge
                    FILTER t._to == 'test2/P6'
                    RETURN t._from)
for v,e,p in 1..5 ANY 'test2/Q1' testEdge
FILTER p.vertices[1]._id in p6Neighbors
return p
...