Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
78 lines (70 sloc) 3.72 KB
layout description
default
Deleting vertices with associated edges is currently not handled via AQL while the graph management interfaceand theREST API for the graph moduleoffer a vertex deletion functionality

Remove Vertex

Deleting vertices with associated edges is currently not handled via AQL while the graph management interface and the REST API for the graph module offer a vertex deletion functionality. However, as shown in this example based on the knows_graph, a query for this use case can be created.

Example Graph

When deleting vertex eve from the graph, we also want the edges eve -> alice and eve -> bob to be removed. The involved graph and its only edge collection has to be known. In this case it is the graph knows_graph and the edge collection knows.

This query will delete eve with its adjacent edges: {% aqlexample examplevar="examplevar" type="type" query="query" bind="bind" result="result" %} @startDocuBlockInline GRAPHTRAV_removeVertex1 @EXAMPLE_AQL{GRAPHTRAV_removeVertex1} @DATASET{knows_graph} LET edgeKeys = (FOR v, e IN 1..1 ANY 'persons/eve' GRAPH 'knows_graph' RETURN e._key) LET r = (FOR key IN edgeKeys REMOVE key IN knows) REMOVE 'eve' IN persons @END_EXAMPLE_AQL @endDocuBlock GRAPHTRAV_removeVertex1 {% endaqlexample %} {% include aqlexample.html id=examplevar query=query bind=bind result=result %} This query executed several actions:

  • use a graph traversal of depth 1 to get the _key of eve's adjacent edges
  • remove all of these edges from the knows collection
  • remove vertex eve from the persons collection

The following query shows a different design to achieve the same result: {% aqlexample examplevar="examplevar" type="type" query="query" bind="bind" result="result" %} @startDocuBlockInline GRAPHTRAV_removeVertex2 @EXAMPLE_AQL{GRAPHTRAV_removeVertex2} @DATASET{knows_graph} LET edgeKeys = (FOR v, e IN 1..1 ANY 'persons/eve' GRAPH 'knows_graph' REMOVE e._key IN knows) REMOVE 'eve' IN persons @END_EXAMPLE_AQL @endDocuBlock GRAPHTRAV_removeVertex2 {% endaqlexample %} {% include aqlexample.html id=examplevar query=query bind=bind result=result %} Note: The query has to be adjusted to match a graph with multiple vertex/edge collections.

For example, the city graph contains several vertex collections - germanCity and frenchCity and several edge collections - french / german / international Highway.

Example Graph2

To delete city Berlin all edge collections french / german / international Highway have to be considered. The REMOVE operation has to be applied on all edge collections with OPTIONS { ignoreErrors: true }. Not using this option will stop the query whenever a non existing key should be removed in a collection. {% aqlexample examplevar="examplevar" type="type" query="query" bind="bind" result="result" %} @startDocuBlockInline GRAPHTRAV_removeVertex3 @EXAMPLE_AQL{GRAPHTRAV_removeVertex3} @DATASET{routeplanner} LET edgeKeys = (FOR v, e IN 1..1 ANY 'germanCity/Berlin' GRAPH 'routeplanner' RETURN e._key) LET r = (FOR key IN edgeKeys REMOVE key IN internationalHighway OPTIONS { ignoreErrors: true } REMOVE key IN germanHighway OPTIONS { ignoreErrors: true } REMOVE key IN frenchHighway OPTIONS { ignoreErrors: true }) REMOVE 'Berlin' IN germanCity @END_EXAMPLE_AQL @endDocuBlock GRAPHTRAV_removeVertex3 {% endaqlexample %} {% include aqlexample.html id=examplevar query=query bind=bind result=result %}

You can’t perform that action at this time.