2016-06-14 9 views
3

Я исполняющих запрос, аналогичный:ArangoDB Graph-Traversal: Исключить Ребра

FOR v, e IN 1..10 ANY @start GRAPH @graph 
    FILTER e.someCondition 
    RETURN v 

Что я ожидал, что произойдет, если e.someCondition был false, то преимущество в вопросе не будет пройден (и транзитно, все остальные вершины и ребра, доступные только через e, никогда не будут посещены).

Однако, похоже, что происходит то, что e просто пропущен, а затем обход продолжается по этому пути.

Итак, как я могу установить границы на обход графа по свойствам края с помощью AQL?

ответ

3

Запрос поддерживает v, e и p, где p - путь, который он принимает.

ArangoDB documentation показывает несколько примеров.

Я использовал это, чтобы исключить определенные узлы на указанных глубинах в пути, но вы должны указать глубину узлов, например. p.vertices[0].something != 'value').

Другая вещь, которую вы, возможно, захотите посмотреть, - это работать с функциями «Пользовательский посетитель», которые оцениваются по мере прохождения запроса по пути.

This good blog post и этот ArangoDB guide показать некоторые примеры настоящего мира, и это стоит того, чтобы читать и усиливать работу образца. Я использовал эти функции для суммирования данных в пути, агрегированных по свойствам в вершинах в пути, но вы также можете использовать его для выполнения пользовательских путей.

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

Я надеюсь, что это поможет.