ArangoDB v2.8 reached End of Life (EOL) and is no longer supported.
This documentation is outdated. Please see the most recent version here: Try latest
Manage your graphs
The graph module provides functions dealing with graph structures. Examples will explain the REST API on the social graph:
List all graphs
Lists all graphs known to the graph module.
GET /_api/gharial
Lists all graph names stored in this database.
Return codes
- 200: Is returned if the module is available and the graphs could be listed.
Examples
shell> curl --dump - http://localhost:8529/_api/gharial
HTTP/1.1 200 OK
content-type: application/json
{
"error" : false,
"code" : 202,
"graphs" : [
{
"_id" : "_graphs/social",
"_key" : "social",
"_rev" : "577259649",
"edgeDefinitions" : [
{
"collection" : "relation",
"from" : [
"female",
"male"
],
"to" : [
"female",
"male"
]
}
],
"orphanCollections" : [ ]
},
{
"_id" : "_graphs/routeplanner",
"_key" : "routeplanner",
"_rev" : "580339841",
"orphanCollections" : [ ],
"edgeDefinitions" : [
{
"collection" : "germanHighway",
"from" : [
"germanCity"
],
"to" : [
"germanCity"
]
},
{
"collection" : "frenchHighway",
"from" : [
"frenchCity"
],
"to" : [
"frenchCity"
]
},
{
"collection" : "internationalHighway",
"from" : [
"frenchCity",
"germanCity"
],
"to" : [
"frenchCity",
"germanCity"
]
}
]
}
]
}
shell> curl --dump - http://localhost:8529/_api/gharial
HTTP/1.1 200 OK
content-type: application/json
Create a graph
Create a new graph in the graph module.
POST /_api/gharial
A JSON object with these properties is required:
-
name: Name of the graph.
-
edgeDefinitions: An array of definitions for the edge
-
orphanCollections: An array of additional vertex collections.
The creation of a graph requires the name of the graph and a definition of its edges.
See also edge definitions.
Return codes
-
201: Is returned if the graph could be created. The body contains the graph configuration that has been stored.
-
409: Returned if there is a conflict storing the graph. This can occur either if a graph with this name is already stored, or if there is one edge definition with a the same edge collection but a different signature used in any other graph.
Examples
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/gharial <<EOF
{
"name" : "myGraph",
"edgeDefinitions" : [
{
"collection" : "edges",
"from" : [
"startVertices"
],
"to" : [
"endVertices"
]
}
]
}
EOF
HTTP/1.1 201 Created
content-type: application/json
etag: 551176321
{
"error" : false,
"code" : 201,
"graph" : {
"name" : "myGraph",
"edgeDefinitions" : [
{
"collection" : "edges",
"from" : [
"startVertices"
],
"to" : [
"endVertices"
]
}
],
"orphanCollections" : [ ],
"_id" : "_graphs/myGraph",
"_rev" : "551176321"
}
}
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/gharial <<EOF
{
"name" : "myGraph",
"edgeDefinitions" : [
{
"collection" : "edges",
"from" : [
"startVertices"
],
"to" : [
"endVertices"
]
}
]
}
EOF
HTTP/1.1 201 Created
content-type: application/json
etag: 551176321
Get a graph
Get a graph from the graph module.
GET /_api/gharial/{graph-name}
Gets a graph from the collection _graphs.
Returns the definition content of this graph.
@RESTPARAM{graph-name, string, required}
The name of the graph.
Return codes
-
200: Returned if the graph could be found.
-
404: Returned if no graph with this name could be found.
Examples
shell> curl --dump - http://localhost:8529/_api/gharial/myGraph
HTTP/1.1 200 OK
content-type: application/json
etag: 572082305
{
"error" : false,
"code" : 200,
"graph" : {
"name" : "myGraph",
"edgeDefinitions" : [
{
"collection" : "edges",
"from" : [
"startVertices"
],
"to" : [
"endVertices"
]
}
],
"orphanCollections" : [ ],
"_id" : "_graphs/myGraph",
"_rev" : "572082305"
}
}
shell> curl --dump - http://localhost:8529/_api/gharial/myGraph
HTTP/1.1 200 OK
content-type: application/json
etag: 572082305
Drop a graph
delete an existing graph
DELETE /_api/gharial/{graph-name}
Removes a graph from the collection _graphs.
@RESTPARAM{graph-name, string, required}
The name of the graph.
@RESTPARAM{dropCollections, boolean, optional}
Drop collections of this graph as well.
Collections will only be dropped if they are not used in other graphs.
Return codes
-
200: Returned if the graph could be dropped.
-
404: Returned if no graph with this name could be found.
Examples
shell> curl -X DELETE --dump - http://localhost:8529/_api/gharial/social?dropCollections=true
HTTP/1.1 200 OK
content-type: application/json
{
"error" : false,
"code" : 200,
"removed" : true
}
shell> curl -X DELETE --dump - http://localhost:8529/_api/gharial/social?dropCollections=true
HTTP/1.1 200 OK
content-type: application/json
List vertex collections
Lists all vertex collections used in this graph.
GET /_api/gharial/{graph-name}/vertex
Lists all vertex collections within this graph.
@RESTPARAM{graph-name, string, required}
The name of the graph.
Return codes
-
200: Is returned if the collections could be listed.
-
404: Returned if no graph with this name could be found.
Examples
shell> curl --dump - http://localhost:8529/_api/gharial/social/vertex
HTTP/1.1 200 OK
content-type: application/json
{
"error" : false,
"code" : 200,
"collections" : [
"female",
"male"
]
}
shell> curl --dump - http://localhost:8529/_api/gharial/social/vertex
HTTP/1.1 200 OK
content-type: application/json
Add vertex collection
Add an additional vertex collection to the graph.
POST /_api/gharial/{graph-name}/vertex
Adds a vertex collection to the set of collections of the graph. If the
collection does not exist, it will be created.
@RESTPARAM{graph-name, string, required}
The name of the graph.
Return codes
-
201: Returned if the edge collection could be added successfully.
-
404: Returned if no graph with this name could be found.
Examples
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/gharial/social/vertex <<EOF
{
"collection" : "otherVertices"
}
EOF
HTTP/1.1 201 Created
content-type: application/json
etag: 546785409
{
"error" : false,
"code" : 201,
"graph" : {
"name" : "social",
"edgeDefinitions" : [
{
"collection" : "relation",
"from" : [
"female",
"male"
],
"to" : [
"female",
"male"
]
}
],
"orphanCollections" : [
"otherVertices"
],
"_id" : "_graphs/social",
"_rev" : "546785409"
}
}
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/gharial/social/vertex <<EOF
{
"collection" : "otherVertices"
}
EOF
HTTP/1.1 201 Created
content-type: application/json
etag: 546785409
Remove vertex collection
Remove a vertex collection form the graph.
DELETE /_api/gharial/{graph-name}/vertex/{collection-name}
Removes a vertex collection from the graph and optionally deletes the collection,
if it is not used in any other graph.
@RESTPARAM{graph-name, string, required}
The name of the graph.
@RESTPARAM{collection-name, string, required}
The name of the vertex collection.
@RESTPARAM{dropCollection, boolean, optional}
Drop the collection as well.
Collection will only be dropped if it is not used in other graphs.
Return codes
-
200: Returned if the vertex collection was removed from the graph successfully.
-
400: Returned if the vertex collection is still used in an edge definition. In this case it cannot be removed from the graph yet, it has to be removed from the edge definition first.
-
404: Returned if no graph with this name could be found.
Examples
You can remove vertex collections that are not used in any edge collection:
shell> curl -X DELETE --dump - http://localhost:8529/_api/gharial/social/vertex/otherVertices
HTTP/1.1 200 OK
content-type: application/json
etag: 608716929
{
"error" : false,
"code" : 200,
"graph" : {
"name" : "social",
"edgeDefinitions" : [
{
"collection" : "relation",
"from" : [
"female",
"male"
],
"to" : [
"female",
"male"
]
}
],
"orphanCollections" : [ ],
"_id" : "_graphs/social",
"_rev" : "608716929"
}
}
shell> curl -X DELETE --dump - http://localhost:8529/_api/gharial/social/vertex/otherVertices
HTTP/1.1 200 OK
content-type: application/json
etag: 608716929
You cannot remove vertex collections that are used in edge collections:
shell> curl -X DELETE --dump - http://localhost:8529/_api/gharial/social/vertex/male
HTTP/1.1 400 Bad Request
content-type: application/json
{
"error" : true,
"code" : 400,
"errorNum" : 1928,
"errorMessage" : "not in orphan collection"
}
shell> curl -X DELETE --dump - http://localhost:8529/_api/gharial/social/vertex/male
HTTP/1.1 400 Bad Request
content-type: application/json
List edge definitions
Lists all edge definitions
GET /_api/gharial/{graph-name}/edge
Lists all edge collections within this graph.
@RESTPARAM{graph-name, string, required}
The name of the graph.
Return codes
-
200: Is returned if the edge definitions could be listed.
-
404: Returned if no graph with this name could be found.
Examples
shell> curl --dump - http://localhost:8529/_api/gharial/social/edge
HTTP/1.1 200 OK
content-type: application/json
{
"error" : false,
"code" : 200,
"collections" : [
"relation"
]
}
shell> curl --dump - http://localhost:8529/_api/gharial/social/edge
HTTP/1.1 200 OK
content-type: application/json
Add edge definition
Add a new edge definition to the graph
POST /_api/gharial/{graph-name}/edge
A JSON object with these properties is required:
-
collection: The name of the edge collection to be used.
-
from: One or many vertex collections that can contain source vertices.
-
to: One or many edge collections that can contain target vertices.
Adds an additional edge definition to the graph.
This edge definition has to contain a collection and an array of each from and to vertex collections.
An edge definition can only be added if this definition is either not used in any other graph, or it is used
with exactly the same definition. It is not possible to store a definition “e” from “v1” to “v2” in the one
graph, and “e” from “v2” to “v1” in the other graph.
@RESTPARAM{graph-name, string, required}
The name of the graph.
Return codes
-
200: Returned if the definition could be added successfully.
-
400: Returned if the defininition could not be added, the edge collection is used in an other graph with a different signature.
-
404: Returned if no graph with this name could be found.
Examples
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/gharial/social/edge <<EOF
{
"collection" : "lives_in",
"from" : [
"female",
"male"
],
"to" : [
"city"
]
}
EOF
HTTP/1.1 201 Created
content-type: application/json
etag: 538462337
{
"error" : false,
"code" : 201,
"graph" : {
"name" : "social",
"edgeDefinitions" : [
{
"collection" : "relation",
"from" : [
"female",
"male"
],
"to" : [
"female",
"male"
]
},
{
"collection" : "lives_in",
"from" : [
"female",
"male"
],
"to" : [
"city"
]
}
],
"orphanCollections" : [ ],
"_id" : "_graphs/social",
"_rev" : "538462337"
}
}
shell> curl -X POST --data-binary @- --dump - http://localhost:8529/_api/gharial/social/edge <<EOF
{
"collection" : "lives_in",
"from" : [
"female",
"male"
],
"to" : [
"city"
]
}
EOF
HTTP/1.1 201 Created
content-type: application/json
etag: 538462337
Replace an edge definition
Replace an existing edge definition
POST /_api/gharial/{graph-name}/edge/{definition-name}
A JSON object with these properties is required:
-
collection: The name of the edge collection to be used.
-
from: One or many vertex collections that can contain source vertices.
-
to: One or many edge collections that can contain target vertices.
Change one specific edge definition.
This will modify all occurrences of this definition in all graphs known to your database.
@RESTPARAM{graph-name, string, required}
The name of the graph.
@RESTPARAM{definition-name, string, required}
The name of the edge collection used in the definition.
Return codes
-
200: Returned if the edge definition could be replaced.
-
400: Returned if no edge definition with this name is found in the graph.
-
404: Returned if no graph with this name could be found.
Examples
shell> curl -X PUT --data-binary @- --dump - http://localhost:8529/_api/gharial/social/edge/relation <<EOF
{
"collection" : "relation",
"from" : [
"female",
"male",
"animal"
],
"to" : [
"female",
"male",
"animal"
]
}
EOF
HTTP/1.1 200 OK
content-type: application/json
etag: 614090881
{
"error" : false,
"code" : 200,
"graph" : {
"name" : "social",
"edgeDefinitions" : [
{
"collection" : "relation",
"from" : [
"animal",
"female",
"male"
],
"to" : [
"animal",
"female",
"male"
]
}
],
"orphanCollections" : [ ],
"_id" : "_graphs/social",
"_rev" : "614090881"
}
}
shell> curl -X PUT --data-binary @- --dump - http://localhost:8529/_api/gharial/social/edge/relation <<EOF
{
"collection" : "relation",
"from" : [
"female",
"male",
"animal"
],
"to" : [
"female",
"male",
"animal"
]
}
EOF
HTTP/1.1 200 OK
content-type: application/json
etag: 614090881
Remove an edge definition from the graph
Remove an edge definition form the graph
DELETE /_api/gharial/{graph-name}/edge/{definition-name}
Remove one edge definition from the graph.
This will only remove the edge collection, the vertex collections remain untouched and can still be used
in your queries.
@RESTPARAM{graph-name, string, required}
The name of the graph.
@RESTPARAM{definition-name, string, required}
The name of the edge collection used in the definition.
@RESTPARAM{dropCollection, boolean, optional}
Drop the collection as well.
Collection will only be dropped if it is not used in other graphs.
Return codes
-
200: Returned if the edge definition could be removed from the graph.
-
400: Returned if no edge definition with this name is found in the graph.
-
404: Returned if no graph with this name could be found.
Examples
shell> curl -X DELETE --dump - http://localhost:8529/_api/gharial/social/edge/relation
HTTP/1.1 200 OK
content-type: application/json
etag: 564611201
{
"error" : false,
"code" : 200,
"graph" : {
"name" : "social",
"edgeDefinitions" : [ ],
"orphanCollections" : [
"female",
"male"
],
"_id" : "_graphs/social",
"_rev" : "564611201"
}
}
shell> curl -X DELETE --dump - http://localhost:8529/_api/gharial/social/edge/relation
HTTP/1.1 200 OK
content-type: application/json
etag: 564611201