I am writing a graph traversal query in AQL (arangodb 3.1.22) where for some of the paths that are returned, I get a vertex within the path object that is not connected to any of the edges returned within the path object (ie the _from/_to property of the edges does not match the vertex _id).
I was working under the assumption that the path object only returned the vertices and edges on that path. Is this a wrong assumption?
If you pass the starting point as string, no vertex has to exist at all for the traversal:
FOR v, e IN 1..10 OUTBOUND "nodes/non-existing-start" edges
RETURN { vertex: v, _from: e._from, _to: e._to }
Data (vertices in collection nodes
and edges in edges
):
non-existing-start
|
v
non-existing-1
|
v
non-existing-2
|
v
non-existing-3
What it does is traverse along the edges ( _from
and _to
properties), which do exist, using the edge index. The collection nodes
has to exist, but it is not tested whether the vertices referenced in _from
and _to
actually exist in that collection. The query result is:
[
{
"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"
}
]
As you can see, the vertices are null
, so they don't exist.
You may use a managed graph and the general-graph module to also delete edges connected to a vertex when deleting the vertex to ensure consistency.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.