Обход AQL с использованием фильтрации путей
Я пишу запрос обхода графика в AQL (arangodb 3.1.22), где для некоторых возвращаемых путей я получаю вершину внутри объекта пути, которая не связана с каким-либо из ребер, возвращаемых объектом пути (т.е. _from/_to свойство ребер не соответствует вершине _id).
Я работал в предположении, что объект path только вернул вершины и ребра на этом пути. Это неправильное предположение?
Если вы передаете исходную точку в виде строки, для ее обхода не должно существовать никаких вершин:
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
, поэтому их не существует.
Вы можете использовать управляемый граф и модуль общего графика, чтобы также удалять ребра, связанные с вершиной, при удалении вершины для обеспечения согласованности.