1
0
Fork 0
arangodb/Documentation/DocuBlocks/JSF_aql_general_graph_trave...

4.4 KiB

The GRAPH_TRAVERSAL function traverses through the graph.

GRAPH_TRAVERSAL (graphName, startVertexExample, direction, options)

This function performs traversals on the given graph.

The complexity of this function strongly depends on the usage.

Parameters

  • graphName : The name of the graph as a string.
  • startVertexExample : An example for the desired vertices (see example).
  • direction : The direction of the edges as a string. Possible values are outbound, inbound and any (default).
  • options: Object containing optional options.

Options:

  • strategy: determines the visitation strategy. Possible values are depthfirst and breadthfirst. Default is breadthfirst.

  • order: determines the visitation order. Possible values are preorder and postorder.

  • itemOrder: determines the order in which connections returned by the expander will be processed. Possible values are forward and backward.

  • maxDepth: if set to a value greater than 0, this will limit the traversal to this maximum depth.

  • minDepth: if set to a value greater than 0, all vertices found on a level below the minDepth level will not be included in the result.

  • maxIterations: the maximum number of iterations that the traversal is allowed to perform. It is sensible to set this number so unbounded traversals will terminate at some point.

  • uniqueness: an object that defines how repeated visitations of vertices should be handled. The uniqueness object can have a sub-attribute vertices, and a sub-attribute edges. Each sub-attribute can have one of the following values:

    • "none": no uniqueness constraints
    • "path": element is excluded if it is already contained in the current path. This setting may be sensible for graphs that contain cycles (e.g. A -> B -> C -> A).
    • "global": element is excluded if it was already found/visited at any point during the traversal.
  • filterVertices An optional array of example vertex documents that the traversal will treat specially. If no examples are given, the traversal will handle all encountered vertices equally. If one or many vertex examples are given, the traversal will exclude any non-matching vertex from the result and/or not descend into it. Optionally, filterVertices can contain a string containing the name of a user-defined AQL function that should be responsible for filtering. If so, the AQL function is expected to have the following signature:

    function (config, vertex, path)

    If a custom AQL function is used for filterVertices, it is expected to return one of the following values:

    • : Include the vertex in the result and descend into its connected edges
    • [ "prune" ]: Will include the vertex in the result but not descend into its connected edges
    • [ "exclude" ]: Will not include the vertex in the result but descend into its connected edges
    • [ "prune", "exclude" ]: Will completely ignore the vertex and its connected edges
  • vertexFilterMethod: Only useful in conjunction with filterVertices and if no user-defined AQL function is used. If specified, it will influence how vertices are handled that don't match the examples in filterVertices:

    • [ "prune" ]: Will include non-matching vertices in the result but not descend into them
    • [ "exclude" ]: Will not include non-matching vertices in the result but descend into them
    • [ "prune", "exclude" ]: Will completely ignore the vertex and its connected edges

@EXAMPLES

A route planner example, start a traversal from Hamburg :

@EXAMPLE_ARANGOSH_OUTPUT{generalGraphTraversal1} var examples = require("@arangodb/graph-examples/example-graph.js"); var g = examples.loadGraph("routeplanner"); | db._query("FOR e IN GRAPH_TRAVERSAL('routeplanner', 'germanCity/Hamburg'," + | " 'outbound') RETURN e" ).toArray(); ~ examples.dropGraph("routeplanner"); @END_EXAMPLE_ARANGOSH_OUTPUT

A route planner example, start a traversal from Hamburg with a max depth of 1 so only the direct neighbors of Hamburg are returned:

@EXAMPLE_ARANGOSH_OUTPUT{generalGraphTraversal2} var examples = require("@arangodb/graph-examples/example-graph.js"); var g = examples.loadGraph("routeplanner"); | db._query("FOR e IN GRAPH_TRAVERSAL('routeplanner', 'germanCity/Hamburg'," + | " 'outbound', {maxDepth : 1}) RETURN e" ).toArray(); ~ examples.dropGraph("routeplanner"); @END_EXAMPLE_ARANGOSH_OUTPUT