简体   繁体   中英

AQL traversal using path filtering

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM