Учитывая набор узлов сильно связного графа в качестве входных данных, можем ли мы получить подграф и обход пути между ними

У меня есть это требование в ArangoDB AQL: у меня есть граф, созданный с помощью коллекции документов для узла и коллекции Edge для направленного отношения ребер.

Я хочу ввести подмножество списка узлов в качестве входных данных для запроса AQL и получить все обходы узлов / подграф в качестве выходных данных.

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

Теперь я знаю ниже запрос

FOR v IN 1..1 INBOUND[or OUTBOUND] 'Collection/_key' EdgeCollection
OPTIONS {bfs: true}
RETURN v

person Morse    schedule 05.03.2018    source источник
comment
У вас есть образец запроса, который вы пробовали с вашими данными в работающей базе данных ArangoDB?   -  person David Thomas    schedule 06.03.2018
comment
FOR v IN 1..1 INBOUND[or OUTBOUND] 'Collection/_key' EdgeCollection OPTIONS {bfs: true} RETURN v - это запрос, я думаю, он применим к любым примерам графиков, которые они привели в документации [GOT ancestry] (docs.arangodb.com/3.2/AQL/Tutorial/Traversal.html) может быть расширен для большей иерархии и, я думаю, опробован.   -  person Morse    schedule 06.03.2018


Ответы (1)


Я бы рекомендовал просмотреть запросы на странице примера ArangoDB, где это показывает, как он выполняет графические запросы и как просматривать результаты.

В приведенном выше примере запроса вы возвращаете только v (информацию о вершинах), как в FOR v IN.

Это возвращает только последнюю вершину из каждого пути, возвращаемого запросом, но не возвращает информацию о ребре или пути.

Для этого вам нужно протестировать с FOR v, e, p IN, и он вернет дополнительную информацию о последнем ребре (e) и пройденном пути (p).

В частности, посмотрите на результаты p, поскольку он содержит объект JSON, который содержит информацию о пути, которая представляет собой набор вершин и ребер.

Путем итерации этих данных вы сможете извлечь нужную информацию.

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

person David Thomas    schedule 08.03.2018
comment
Я понял это вчера. Хотя это громоздко, но можно написать кастомную функцию и проделать какие-то манипуляции. Голосование за! - person Morse; 08.03.2018
comment
Я стараюсь не писать собственные функции, а предпочитаю выполнять подзапросы или использовать формат LET abc = (FOR ... для загрузки результатов запроса в переменные. Затем вы можете связать несколько команд LET, которые запрашивают результаты других команд LET, и вы можете очень легко работать над агрегированием и подсчетом уникальных путей, а также с фильтрацией путей на основе вершин или ребер в них, или даже атрибутов этих вершин. и края. После того, как запрос заработает, используйте функцию «Объяснить запрос», чтобы узнать, можно ли оптимизировать производительность с помощью индексов или путем разбивки сложных запросов на более мелкие части. - person David Thomas; 10.03.2018