Обход AQL с использованием фильтрации путей

64
5

Я пишу запрос обхода графика в AQL (arangodb 3.1.22), где для некоторых возвращаемых путей я получаю вершину внутри объекта пути, которая не связана с каким-либо из ребер, возвращаемых объектом пути (т.е. _from/_to свойство ребер не соответствует вершине _id).

Я работал в предположении, что объект path только вернул вершины и ребра на этом пути. Это неправильное предположение?

спросил(а) 2021-01-19T14:59:16+03:00 6 месяцев, 2 недели назад
1
Решение
91

Если вы передаете исходную точку в виде строки, для ее обхода не должно существовать никаких вершин:

FOR v, e IN 1..10 OUTBOUND "nodes/non-existing-start" edges
RETURN { vertex: v, _from: e._from, _to: e._to }

Данные (вершины в nodes коллекции и ребрах в edges):

non-existing-start
|
v
non-existing-1
|
v
non-existing-2
|
v
non-existing-3

То, что он делает, - это перемещение по краям (_from и _to свойствам), которые существуют, используя индекс края. nodes сбора должны существовать, но не проверяются, действительно ли вершины, на которые ссылаются _from и _to фактически существуют в этой коллекции. Результат запроса:

[
{
"vertex": null,
"_from": "nodes/non-existing-start",
"_to": "nodes/non-existing-1"
},
{
"vertex": null,
"_from": "nodes/non-existing-1",
"_to": "nodes/non-existing-2"
},
{
"vertex": null,
"_from": "nodes/non-existing-2",
"_to": "nodes/non-existing-3"
}
]

Как вы можете видеть, вершины равны null, поэтому их не существует.

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

ответил(а) 2021-01-19T14:59:16+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема