Working with a Document

Read document

reads a single document

GET /_api/document/{collection}/{key}

Path Parameters

  • collection (string, required): Name of the collection from which the document is to be read.

  • key (string, required): The document key.

Header Parameters

  • If-None-Match (string, optional): If the “If-None-Match” header is given, then it must contain exactly one Etag. The document is returned, if it has a different revision than the given Etag. Otherwise an HTTP 304 is returned.

  • If-Match (string, optional): If the “If-Match” header is given, then it must contain exactly one Etag. The document is returned, if it has the same revision as the given Etag. Otherwise a HTTP 412 is returned.

Returns the document identified by document-id. The returned document contains three special attributes: _id containing the document identifier, _key containing key which uniquely identifies a document in a given collection and _rev containing the revision.

Responses

HTTP 200: is returned if the document was found

HTTP 304: is returned if the “If-None-Match” header is given and the document has the same version

HTTP 404: is returned if the document or collection was not found

HTTP 412: is returned if an “If-Match” header is given and the found document has a different version. The response will also contain the found document’s current revision in the _rev attribute. Additionally, the attributes _id and _key will be returned.

Examples

Use a document identifier:

shell> curl --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67792

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 76
etag: "_eLYWlnO--_"
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Use a document identifier and an Etag:

shell> curl --header 'If-None-Match: "_eLYWlne--_"' --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67812

Unknown document identifier:

shell> curl --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/unknown-identifier

HTTP/1.1 404 Not Found
content-type: application/json
connection: Keep-Alive
content-length: 97
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Read document header

reads a single document head

HEAD /_api/document/{collection}/{key}

Path Parameters

  • collection (string, required): Name of the collection from which the document is to be read.

  • key (string, required): The document key.

Header Parameters

  • If-None-Match (string, optional): If the “If-None-Match” header is given, then it must contain exactly one Etag. If the current document revision is not equal to the specified Etag, an HTTP 200 response is returned. If the current document revision is identical to the specified Etag, then an HTTP 304 is returned.

  • If-Match (string, optional): If the “If-Match” header is given, then it must contain exactly one Etag. The document is returned, if it has the same revision as the given Etag. Otherwise a HTTP 412 is returned.

Like GET, but only returns the header fields and not the body. You can use this call to get the current revision of a document or check if the document was deleted.

Responses

HTTP 200: is returned if the document was found

HTTP 304: is returned if the “If-None-Match” header is given and the document has the same version

HTTP 404: is returned if the document or collection was not found

HTTP 412: is returned if an “If-Match” header is given and the found document has a different version. The response will also contain the found document’s current revision in the Etag header.

Examples

shell> curl -X HEAD --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67802

Create document

creates documents

POST /_api/document/{collection}

Path Parameters

  • collection (string, required): Name of the collection in which the document is to be created.

Query Parameters

  • collection (string, optional): The name of the collection. This is only for backward compatibility. In ArangoDB versions < 3.0, the URL path was /_api/document and this query parameter was required. This combination still works, but the recommended way is to specify the collection in the URL path.

  • waitForSync (boolean, optional): Wait until document has been synced to disk.

  • returnNew (boolean, optional): Additionally return the complete new document under the attribute new in the result.

  • returnOld (boolean, optional): Additionally return the complete old document under the attribute old in the result. Only available if the overwrite option is used.

  • silent (boolean, optional): If set to true, an empty object will be returned as response. No meta-data will be returned for the created document. This option can be used to save some network traffic.

  • overwrite (boolean, optional): If set to true, the insert becomes a replace-insert. If a document with the same _key already exists the new document is not rejected with unique constraint violated but will replace the old document. Note that operations with overwrite parameter require a _key attribute in the request payload, therefore they can only be performed on collections sharded by _key.

  • overwriteMode (string, optional): This option supersedes overwrite and offers the following modes:
    • "ignore": if a document with the specified _key value exists already, nothing will be done and no write operation will be carried out. The insert operation will return success in this case. This mode does not support returning the old document version using RETURN OLD. When using RETURN NEW, null will be returned in case the document already existed.
    • "replace": if a document with the specified _key value exists already, it will be overwritten with the specified document value. This mode will also be used when no overwrite mode is specified but the overwrite flag is set to true.
    • "update": if a document with the specified _key value exists already, it will be patched (partially updated) with the specified document value. The overwrite mode can be further controlled via the keepNull and mergeObjects parameters.
    • "conflict": if a document with the specified _key value exists already, return a unique constraint violation error so that the insert operation fails. This is also the default behavior in case the overwrite mode is not set, and the overwrite flag is false or not set either.
  • keepNull (boolean, optional): If the intention is to delete existing attributes with the update-insert command, the URL query parameter keepNull can be used with a value of false. This will modify the behavior of the patch command to remove any attributes from the existing document that are contained in the patch document with an attribute value of null. This option controls the update-insert behavior only.

  • mergeObjects (boolean, optional): Controls whether objects (not arrays) will be merged if present in both the existing and the update-insert document. If set to false, the value in the patch document will overwrite the existing document’s value. If set to true, objects will be merged. The default is true. This option controls the update-insert behavior only.

Request Body

(json, required)

A JSON representation of a single document.

Creates a new document from the document given in the body, unless there is already a document with the _key given. If no _key is given, a new unique _key is generated automatically.

Possibly given _id and _rev attributes in the body are always ignored, the URL part or the query parameter collection respectively counts.

If the document was created successfully, then the Location header contains the path to the newly created document. The Etag header field contains the revision of the document. Both are only set in the single document case.

If silent is not set to true, the body of the response contains a JSON object with the following attributes:

  • _id contains the document identifier of the newly created document
  • _key contains the document key
  • _rev contains the document revision

If the collection parameter waitForSync is false, then the call returns as soon as the document has been accepted. It will not wait until the documents have been synced to disk.

Optionally, the query parameter waitForSync can be used to force synchronization of the document creation operation to disk even in case that the waitForSync flag had been disabled for the entire collection. Thus, the waitForSync query parameter can be used to force synchronization of just this specific operations. To use this, set the waitForSync parameter to true. If the waitForSync parameter is not specified or set to false, then the collection’s default waitForSync behavior is applied. The waitForSync query parameter cannot be used to disable synchronization for collections that have a default waitForSync value of true.

If the query parameter returnNew is true, then, for each generated document, the complete new document is returned under the new attribute in the result.

Responses

HTTP 201: is returned if the documents were created successfully and waitForSync was true.

HTTP 202: is returned if the documents were created successfully and waitForSync was false.

HTTP 400: is returned if the body does not contain a valid JSON representation of one document. The response body contains an error document in this case.

HTTP 404: is returned if the collection specified by collection is unknown. The response body contains an error document in this case.

HTTP 409: is returned in the single document case if a document with the same qualifiers in an indexed attribute conflicts with an already existing document and thus violates that unique constraint. The response body contains an error document in this case.

Examples

Create a document in a collection named products. Note that the revision identifier might or might not by equal to the auto-generated key.

shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
{ "Hello": "World" }
EOF

HTTP/1.1 201 Created
content-type: application/json
connection: Keep-Alive
content-length: 60
etag: "_eLYWllu--_"
location: /_db/_system/_api/document/products/67732
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Create a document in a collection named products with a collection-level waitForSync value of false.

shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
{ "Hello": "World" }
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 60
etag: "_eLYWllW--_"
location: /_db/_system/_api/document/products/67708
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Create a document in a collection with a collection-level waitForSync value of false, but using the waitForSync query parameter.

shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products?waitForSync=true <<EOF
{ "Hello": "World" }
EOF

HTTP/1.1 201 Created
content-type: application/json
connection: Keep-Alive
content-length: 60
etag: "_eLYWln---_"
location: /_db/_system/_api/document/products/67783
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Unknown collection name

shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
{ "Hello": "World" }
EOF

HTTP/1.1 404 Not Found
content-type: application/json
connection: Keep-Alive
content-length: 97
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Illegal document

shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
{ 1: "World" }
EOF

HTTP/1.1 400 Bad Request
content-type: application/json
connection: Keep-Alive
content-length: 97
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Use of returnNew:

shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products?returnNew=true <<EOF
{"Hello":"World"}
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 143
etag: "_eLYWlmy--_"
location: /_db/_system/_api/document/products/67772
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body
shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
{ "Hello": "World", "_key" : "lock" }
EOF

HTTP/1.1 201 Created
content-type: application/json
connection: Keep-Alive
content-length: 58
etag: "_eLYWlmW--_"
location: /_db/_system/_api/document/products/lock
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products?overwrite=true <<EOF
{ "Hello": "Universe", "_key" : "lock" }
EOF

HTTP/1.1 201 Created
content-type: application/json
connection: Keep-Alive
content-length: 82
etag: "_eLYWlmi---"
location: /_db/_system/_api/document/products/lock
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Replace document

replaces a document

PUT /_api/document/{collection}/{key}

Path Parameters

  • collection (string, required): Name of the collection in which the document is to be replaced.

  • key (string, required): The document key.

Query Parameters

  • waitForSync (boolean, optional): Wait until document has been synced to disk.

  • ignoreRevs (boolean, optional): By default, or if this is set to true, the _rev attributes in the given document is ignored. If this is set to false, then the _rev attribute given in the body document is taken as a precondition. The document is only replaced if the current revision is the one specified.

  • returnOld (boolean, optional): Return additionally the complete previous revision of the changed document under the attribute old in the result.

  • returnNew (boolean, optional): Return additionally the complete new document under the attribute new in the result.

  • silent (boolean, optional): If set to true, an empty object will be returned as response. No meta-data will be returned for the replaced document. This option can be used to save some network traffic.

Header Parameters

  • If-Match (string, optional): You can conditionally replace a document based on a target revision id by using the if-match HTTP header.

Request Body

(json, required)

A JSON representation of a single document.

Replaces the specified document with the one in the body, provided there is such a document and no precondition is violated.

The value of the _key attribute as well as attributes used as sharding keys may not be changed.

If the If-Match header is specified and the revision of the document in the database is unequal to the given revision, the precondition is violated.

If If-Match is not given and ignoreRevs is false and there is a _rev attribute in the body and its value does not match the revision of the document in the database, the precondition is violated.

If a precondition is violated, an HTTP 412 is returned.

If the document exists and can be updated, then an HTTP 201 or an HTTP 202 is returned (depending on waitForSync, see below), the Etag header field contains the new revision of the document and the Location header contains a complete URL under which the document can be queried.

Cluster only: The replace documents may contain values for the collection’s pre-defined shard keys. Values for the shard keys are treated as hints to improve performance. Should the shard keys values be incorrect ArangoDB may answer with a not found error.

Optionally, the query parameter waitForSync can be used to force synchronization of the document replacement operation to disk even in case that the waitForSync flag had been disabled for the entire collection. Thus, the waitForSync query parameter can be used to force synchronization of just specific operations. To use this, set the waitForSync parameter to true. If the waitForSync parameter is not specified or set to false, then the collection’s default waitForSync behavior is applied. The waitForSync query parameter cannot be used to disable synchronization for collections that have a default waitForSync value of true.

If silent is not set to true, the body of the response contains a JSON object with the information about the identifier and the revision. The attribute _id contains the known document-id of the updated document, _key contains the key which uniquely identifies a document in a given collection, and the attribute _rev contains the new document revision.

If the query parameter returnOld is true, then the complete previous revision of the document is returned under the old attribute in the result.

If the query parameter returnNew is true, then the complete new document is returned under the new attribute in the result.

If the document does not exist, then a HTTP 404 is returned and the body of the response contains an error document.

Responses

HTTP 201: is returned if the document was replaced successfully and waitForSync was true.

HTTP 202: is returned if the document was replaced successfully and waitForSync was false.

HTTP 400: is returned if the body does not contain a valid JSON representation of a document. The response body contains an error document in this case.

HTTP 404: is returned if the collection or the document was not found.

HTTP 409: is returned if the replace causes a unique constraint violation in a secondary index.

HTTP 412: is returned if the precondition was violated. The response will also contain the found documents’ current revisions in the _rev attributes. Additionally, the attributes _id and _key will be returned.

Examples

Using a document identifier

shell> curl -X PUT --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products/67834 <<EOF
{"Hello": "you"}
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 84
etag: "_eLYWlny--A"
location: /_db/_system/_api/document/products/67834
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Unknown document identifier

shell> curl -X PUT --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products/67857 <<EOF
{}
EOF

HTTP/1.1 404 Not Found
content-type: application/json
connection: Keep-Alive
content-length: 77
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Produce a revision conflict

shell> curl -X PUT --header 'If-Match: "_eLYWln6--A"' --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products/67844 <<EOF
{"other":"content"}
EOF

HTTP/1.1 412 Precondition Failed
content-type: application/json
connection: Keep-Alive
content-length: 152
etag: "_eLYWln6--_"
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Update document

updates a document

PATCH /_api/document/{collection}/{key}

Path Parameters

  • collection (string, required): Name of the collection in which the document is to be updated.

  • key (string, required): The document key.

Query Parameters

  • keepNull (boolean, optional): If the intention is to delete existing attributes with the patch command, the URL query parameter keepNull can be used with a value of false. This will modify the behavior of the patch command to remove any attributes from the existing document that are contained in the patch document with an attribute value of null.

  • mergeObjects (boolean, optional): Controls whether objects (not arrays) will be merged if present in both the existing and the patch document. If set to false, the value in the patch document will overwrite the existing document’s value. If set to true, objects will be merged. The default is true.

  • waitForSync (boolean, optional): Wait until document has been synced to disk.

  • ignoreRevs (boolean, optional): By default, or if this is set to true, the _rev attributes in the given document is ignored. If this is set to false, then the _rev attribute given in the body document is taken as a precondition. The document is only updated if the current revision is the one specified.

  • returnOld (boolean, optional): Return additionally the complete previous revision of the changed document under the attribute old in the result.

  • returnNew (boolean, optional): Return additionally the complete new document under the attribute new in the result.

  • silent (boolean, optional): If set to true, an empty object will be returned as response. No meta-data will be returned for the updated document. This option can be used to save some network traffic.

Header Parameters

  • If-Match (string, optional): You can conditionally update a document based on a target revision id by using the if-match HTTP header.

Request Body

(json, required)

A JSON representation of a document update as an object.

Partially updates the document identified by document-id. The body of the request must contain a JSON document with the attributes to patch (the patch document). All attributes from the patch document will be added to the existing document if they do not yet exist, and overwritten in the existing document if they do exist there.

The value of the _key attribute as well as attributes used as sharding keys may not be changed.

Setting an attribute value to null in the patch document will cause a value of null to be saved for the attribute by default.

If the If-Match header is specified and the revision of the document in the database is unequal to the given revision, the precondition is violated.

If If-Match is not given and ignoreRevs is false and there is a _rev attribute in the body and its value does not match the revision of the document in the database, the precondition is violated.

If a precondition is violated, an HTTP 412 is returned.

If the document exists and can be updated, then an HTTP 201 or an HTTP 202 is returned (depending on waitForSync, see below), the Etag header field contains the new revision of the document (in double quotes) and the Location header contains a complete URL under which the document can be queried.

Cluster only: The patch document may contain values for the collection’s pre-defined shard keys. Values for the shard keys are treated as hints to improve performance. Should the shard keys values be incorrect ArangoDB may answer with a not found error

Optionally, the query parameter waitForSync can be used to force synchronization of the updated document operation to disk even in case that the waitForSync flag had been disabled for the entire collection. Thus, the waitForSync query parameter can be used to force synchronization of just specific operations. To use this, set the waitForSync parameter to true. If the waitForSync parameter is not specified or set to false, then the collection’s default waitForSync behavior is applied. The waitForSync query parameter cannot be used to disable synchronization for collections that have a default waitForSync value of true.

If silent is not set to true, the body of the response contains a JSON object with the information about the identifier and the revision. The attribute _id contains the known document-id of the updated document, _key contains the key which uniquely identifies a document in a given collection, and the attribute _rev contains the new document revision.

If the query parameter returnOld is true, then the complete previous revision of the document is returned under the old attribute in the result.

If the query parameter returnNew is true, then the complete new document is returned under the new attribute in the result.

If the document does not exist, then a HTTP 404 is returned and the body of the response contains an error document.

Responses

HTTP 201: is returned if the document was updated successfully and waitForSync was true.

HTTP 202: is returned if the document was updated successfully and waitForSync was false.

HTTP 400: is returned if the body does not contain a valid JSON representation of a document. The response body contains an error document in this case.

HTTP 404: is returned if the collection or the document was not found.

HTTP 409: is returned if the update causes a unique constraint violation in a secondary index.

HTTP 412: is returned if the precondition was violated. The response will also contain the found documents’ current revisions in the _rev attributes. Additionally, the attributes _id and _key will be returned.

Examples

Patches an existing document with new content.

shell> curl -X PATCH --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products/67680 <<EOF
{ 
  "hello" : "world" 
}
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 84
etag: "_eLYWlkq--A"
location: /_db/_system/_api/document/products/67680
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
shell> curl -X PATCH --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products/67680 <<EOF
{ 
  "numbers" : { 
    "one" : 1, 
    "two" : 2, 
    "three" : 3, 
    "empty" : null 
  } 
}
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 84
etag: "_eLYWlku---"
location: /_db/_system/_api/document/products/67680
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
shell> curl --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67680

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 141
etag: "_eLYWlku---"
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
shell> curl -X PATCH --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products/67680?keepNull=false <<EOF
{ 
  "hello" : null, 
  "numbers" : { 
    "four" : 4 
  } 
}
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 84
etag: "_eLYWlk2---"
location: /_db/_system/_api/document/products/67680
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
shell> curl --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67680

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 134
etag: "_eLYWlk2---"
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Merging attributes of an object using mergeObjects:

shell> curl --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67694

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 130
etag: "_eLYWll---_"
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
shell> curl -X PATCH --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products/67694?mergeObjects=true <<EOF
{ 
  "inhabitants" : { 
    "indonesia" : 252164800, 
    "brazil" : 203553000 
  } 
}
EOF

shell> curl --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67694

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 171
etag: "_eLYWllG---"
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
shell> curl -X PATCH --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products/67694?mergeObjects=false <<EOF
{ 
  "inhabitants" : { 
    "pakistan" : 188346000 
  } 
}
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 84
etag: "_eLYWllO---"
location: /_db/_system/_api/document/products/67694
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
shell> curl --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67694

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 97
etag: "_eLYWllO---"
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Removes a document

removes a document

DELETE /_api/document/{collection}/{key}

Path Parameters

  • collection (string, required): Name of the collection in which the document is to be deleted.

  • key (string, required): The document key.

Query Parameters

  • waitForSync (boolean, optional): Wait until deletion operation has been synced to disk.

  • returnOld (boolean, optional): Return additionally the complete previous revision of the changed document under the attribute old in the result.

  • silent (boolean, optional): If set to true, an empty object will be returned as response. No meta-data will be returned for the removed document. This option can be used to save some network traffic.

Header Parameters

  • If-Match (string, optional): You can conditionally remove a document based on a target revision id by using the if-match HTTP header.

If silent is not set to true, the body of the response contains a JSON object with the information about the identifier and the revision. The attribute _id contains the known document-id of the removed document, _key contains the key which uniquely identifies a document in a given collection, and the attribute _rev contains the document revision.

If the waitForSync parameter is not specified or set to false, then the collection’s default waitForSync behavior is applied. The waitForSync query parameter cannot be used to disable synchronization for collections that have a default waitForSync value of true.

If the query parameter returnOld is true, then the complete previous revision of the document is returned under the old attribute in the result.

Responses

HTTP 200: is returned if the document was removed successfully and waitForSync was true.

HTTP 202: is returned if the document was removed successfully and waitForSync was false.

HTTP 404: is returned if the collection or the document was not found. The response body contains an error document in this case.

HTTP 412: is returned if a “If-Match” header or rev is given and the found document has a different version. The response will also contain the found document’s current revision in the _rev attribute. Additionally, the attributes _id and _key will be returned.

Examples

Using document identifier:

shell> curl -X DELETE --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67584

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 60
etag: "_eLYWlgy--_"
location: /_db/_system/_api/document/products/67584
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Unknown document identifier:

shell> curl -X DELETE --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67652

HTTP/1.1 404 Not Found
content-type: application/json
connection: Keep-Alive
content-length: 77
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Revision conflict:

shell> curl -X DELETE --header 'If-Match: "_eLYWlhy--A"' --header 'accept: application/json' --dump - http://localhost:8529/_api/document/products/67603

HTTP/1.1 412 Precondition Failed
content-type: application/json
connection: Keep-Alive
content-length: 152
etag: "_eLYWlhy--_"
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Bulk Document Operations

ArangoDB supports working with document in bulk. Bulk operations affect a single collection. Using this API variant allows clients to amortize the overhead of single requests over an entire batch of documents. Bulk operations are not guaranteed to be executed serially, ArangoDB may execute the operations in parallel. This can translate into large performance improvements especially in a cluster deployment.

ArangoDB will continue to process the remaining operations should an error occur during the processing of one operation. Errors are returned inline in the response body as an error document (see below for more details). Additionally the X-Arango-Error-Codes header will contains a map of the error codes that occurred together with their multiplicities, like 1205:10,1210:17 which means that in 10 cases the error 1205 illegal document handle and in 17 cases the error 1210 unique constraint violated has happened.

Generally the bulk operations expect an input array and the result body will contain a JSON array of the same length.

Read multiple documents

reads a single document

PUT /_api/document/{collection}

Path Parameters

  • collection (string, required): Name of the collection from which the documents are to be read.

Query Parameters

  • onlyget (boolean, required): This parameter is required to be true, otherwise a replace operation is executed!

  • ignoreRevs (string, optional): Should the value be true (the default): If a search document contains a value for the _rev field, then the document is only returned if it has the same revision value. Otherwise a precondition failed error is returned.

Returns the documents identified by their _key in the body objects. The body of the request must contain a JSON array of either strings (the _key values to lookup) or search documents.

A search document must contain at least a value for the _key field. A value for _rev may be specified to verify whether the document has the same revision value, unless ignoreRevs is set to false.

Cluster only: The search document may contain values for the collection’s pre-defined shard keys. Values for the shard keys are treated as hints to improve performance. Should the shard keys values be incorrect ArangoDB may answer with a not found error.

The returned array of documents contain three special attributes: _id containing the document identifier, _key containing key which uniquely identifies a document in a given collection and _rev containing the revision.

Responses

HTTP 200: is returned if no error happened

HTTP 400: is returned if the body does not contain a valid JSON representation of an array of documents. The response body contains an error document in this case.

HTTP 404: is returned if the collection was not found.

Examples

Reading multiple documents identifier:

shell> curl -X PUT --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products?onlyget=true <<EOF
["doc1", {"_key":"doc2"}]
EOF

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 153
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Create multiple documents

creates multiple documents

POST /_api/document/{collection}

Path Parameters

  • collection (string, required): Name of the collection in which the documents are to be created.

Query Parameters

  • collection (string, optional): The name of the collection. This is only for backward compatibility. In ArangoDB versions < 3.0, the URL path was /_api/document and this query parameter was required. This combination still works, but the recommended way is to specify the collection in the URL path.

  • waitForSync (boolean, optional): Wait until document has been synced to disk.

  • returnNew (boolean, optional): Additionally return the complete new document under the attribute new in the result.

  • returnOld (boolean, optional): Additionally return the complete old document under the attribute old in the result. Only available if the overwrite option is used.

  • silent (boolean, optional): If set to true, an empty object will be returned as response. No meta-data will be returned for the created document. This option can be used to save some network traffic.

  • overwrite (boolean, optional): If set to true, the insert becomes a replace-insert. If a document with the same _key already exists the new document is not rejected with unique constraint violated but will replace the old document. Note that operations with overwrite parameter require a _key attribute in the request payload, therefore they can only be performed on collections sharded by _key.

  • overwriteMode (string, optional): This option supersedes overwrite and offers the following modes:
    • "ignore": if a document with the specified _key value exists already, nothing will be done and no write operation will be carried out. The insert operation will return success in this case. This mode does not support returning the old document version using RETURN OLD. When using RETURN NEW, null will be returned in case the document already existed.
    • "replace": if a document with the specified _key value exists already, it will be overwritten with the specified document value. This mode will also be used when no overwrite mode is specified but the overwrite flag is set to true.
    • "update": if a document with the specified _key value exists already, it will be patched (partially updated) with the specified document value. The overwrite mode can be further controlled via the keepNull and mergeObjects parameters.
    • "conflict": if a document with the specified _key value exists already, return a unique constraint violation error so that the insert operation fails. This is also the default behavior in case the overwrite mode is not set, and the overwrite flag is false or not set either.
  • keepNull (boolean, optional): If the intention is to delete existing attributes with the update-insert command, the URL query parameter keepNull can be used with a value of false. This will modify the behavior of the patch command to remove any attributes from the existing document that are contained in the patch document with an attribute value of null. This option controls the update-insert behavior only.

  • mergeObjects (boolean, optional): Controls whether objects (not arrays) will be merged if present in both the existing and the update-insert document. If set to false, the value in the patch document will overwrite the existing document’s value. If set to true, objects will be merged. The default is true. This option controls the update-insert behavior only.

Request Body

(json, required)

An array of documents to create.

Creates new documents from the documents given in the body, unless there is already a document with the _key given. If no _key is given, a new unique _key is generated automatically.

The result body will contain a JSON array of the same length as the input array, and each entry contains the result of the operation for the corresponding input. In case of an error the entry is a document with attributes error set to true and errorCode set to the error code that has happened.

Possibly given _id and _rev attributes in the body are always ignored, the URL part or the query parameter collection respectively counts.

If silent is not set to true, the body of the response contains an array of JSON objects with the following attributes:

  • _id contains the document identifier of the newly created document
  • _key contains the document key
  • _rev contains the document revision

If the collection parameter waitForSync is false, then the call returns as soon as the documents have been accepted. It will not wait until the documents have been synced to disk.

Optionally, the query parameter waitForSync can be used to force synchronization of the document creation operation to disk even in case that the waitForSync flag had been disabled for the entire collection. Thus, the waitForSync query parameter can be used to force synchronization of just this specific operations. To use this, set the waitForSync parameter to true. If the waitForSync parameter is not specified or set to false, then the collection’s default waitForSync behavior is applied. The waitForSync query parameter cannot be used to disable synchronization for collections that have a default waitForSync value of true.

If the query parameter returnNew is true, then, for each generated document, the complete new document is returned under the new attribute in the result.

Should an error have occurred with some of the documents the additional HTTP header X-Arango-Error-Codes is set, which contains a map of the error codes that occurred together with their multiplicities, as in: 1205:10,1210:17 which means that in 10 cases the error 1205 “illegal document handle” and in 17 cases the error 1210 “unique constraint violated” has happened.

Responses

HTTP 201: is returned if waitForSync was true and operations were processed.

HTTP 202: is returned if waitForSync was false and operations were processed.

HTTP 400: is returned if the body does not contain a valid JSON representation of an array of documents. The response body contains an error document in this case.

HTTP 404: is returned if the collection specified by collection is unknown. The response body contains an error document in this case.

Examples

Insert multiple documents:

shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
[{"Hello":"Earth"}, {"Hello":"Venus"}, {"Hello":"Mars"}]
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 184
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Use of returnNew:

shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products?returnNew=true <<EOF
[{"Hello":"Earth"}, {"Hello":"Venus"}, {"Hello":"Mars"}]
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 432
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Partially illegal documents:

shell> curl -X POST --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
[{ "_key": 111 }, {"_key":"abc"}]
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 127
server: ArangoDB
x-arango-error-codes: {"1221":1}
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Replace documents

replaces multiple documents

PUT /_api/document/{collection}

Path Parameters

  • collection (string, required): This URL parameter is the name of the collection in which the documents are replaced.

Query Parameters

  • waitForSync (boolean, optional): Wait until the new documents have been synced to disk.

  • ignoreRevs (boolean, optional): By default, or if this is set to true, the _rev attributes in the given documents are ignored. If this is set to false, then any _rev attribute given in a body document is taken as a precondition. The document is only replaced if the current revision is the one specified.

  • returnOld (boolean, optional): Return additionally the complete previous revision of the changed documents under the attribute old in the result.

  • returnNew (boolean, optional): Return additionally the complete new documents under the attribute new in the result.

Request Body

(json, required)

A JSON representation of an array of documents.

Replaces multiple documents in the specified collection with the ones in the body, the replaced documents are specified by the _key attributes in the body documents.

The value of the _key attribute as well as attributes used as sharding keys may not be changed.

If ignoreRevs is false and there is a _rev attribute in a document in the body and its value does not match the revision of the corresponding document in the database, the precondition is violated.

Cluster only: The replace documents may contain values for the collection’s pre-defined shard keys. Values for the shard keys are treated as hints to improve performance. Should the shard keys values be incorrect ArangoDB may answer with a not found error.

Optionally, the query parameter waitForSync can be used to force synchronization of the document replacement operation to disk even in case that the waitForSync flag had been disabled for the entire collection. Thus, the waitForSync query parameter can be used to force synchronization of just specific operations. To use this, set the waitForSync parameter to true. If the waitForSync parameter is not specified or set to false, then the collection’s default waitForSync behavior is applied. The waitForSync query parameter cannot be used to disable synchronization for collections that have a default waitForSync value of true.

The body of the response contains a JSON array of the same length as the input array with the information about the identifier and the revision of the replaced documents. In each entry, the attribute _id contains the known document-id of each updated document, _key contains the key which uniquely identifies a document in a given collection, and the attribute _rev contains the new document revision. In case of an error or violated precondition, an error object with the attribute error set to true and the attribute errorCode set to the error code is built.

If the query parameter returnOld is true, then, for each generated document, the complete previous revision of the document is returned under the old attribute in the result.

If the query parameter returnNew is true, then, for each generated document, the complete new document is returned under the new attribute in the result.

Note that if any precondition is violated or an error occurred with some of the documents, the return code is still 201 or 202, but the additional HTTP header X-Arango-Error-Codes is set, which contains a map of the error codes that occurred together with their multiplicities, as in: 1200:17,1205:10 which means that in 17 cases the error 1200 “revision conflict” and in 10 cases the error 1205 “illegal document handle” has happened.

Responses

HTTP 201: is returned if waitForSync was true and operations were processed.

HTTP 202: is returned if waitForSync was false and operations were processed.

HTTP 400: is returned if the body does not contain a valid JSON representation of an array of documents. The response body contains an error document in this case.

HTTP 404: is returned if the collection was not found.

Update documents

updates multiple documents

PATCH /_api/document/{collection}

Path Parameters

  • collection (string, required): Name of the collection in which the documents are to be updated.

Query Parameters

  • keepNull (boolean, optional): If the intention is to delete existing attributes with the patch command, the URL query parameter keepNull can be used with a value of false. This will modify the behavior of the patch command to remove any attributes from the existing document that are contained in the patch document with an attribute value of null.

  • mergeObjects (boolean, optional): Controls whether objects (not arrays) will be merged if present in both the existing and the patch document. If set to false, the value in the patch document will overwrite the existing document’s value. If set to true, objects will be merged. The default is true.

  • waitForSync (boolean, optional): Wait until the new documents have been synced to disk.

  • ignoreRevs (boolean, optional): By default, or if this is set to true, the _rev attributes in the given documents are ignored. If this is set to false, then any _rev attribute given in a body document is taken as a precondition. The document is only updated if the current revision is the one specified.

  • returnOld (boolean, optional): Return additionally the complete previous revision of the changed documents under the attribute old in the result.

  • returnNew (boolean, optional): Return additionally the complete new documents under the attribute new in the result.

Request Body

(json, required)

A JSON representation of an array of document updates as objects.

Partially updates documents, the documents to update are specified by the _key attributes in the body objects. The body of the request must contain a JSON array of document updates with the attributes to patch (the patch documents). All attributes from the patch documents will be added to the existing documents if they do not yet exist, and overwritten in the existing documents if they do exist there.

The value of the _key attribute as well as attributes used as sharding keys may not be changed.

Setting an attribute value to null in the patch documents will cause a value of null to be saved for the attribute by default.

If ignoreRevs is false and there is a _rev attribute in a document in the body and its value does not match the revision of the corresponding document in the database, the precondition is violated.

Cluster only: The patch document may contain values for the collection’s pre-defined shard keys. Values for the shard keys are treated as hints to improve performance. Should the shard keys values be incorrect ArangoDB may answer with a not found error

Optionally, the query parameter waitForSync can be used to force synchronization of the document replacement operation to disk even in case that the waitForSync flag had been disabled for the entire collection. Thus, the waitForSync query parameter can be used to force synchronization of just specific operations. To use this, set the waitForSync parameter to true. If the waitForSync parameter is not specified or set to false, then the collection’s default waitForSync behavior is applied. The waitForSync query parameter cannot be used to disable synchronization for collections that have a default waitForSync value of true.

The body of the response contains a JSON array of the same length as the input array with the information about the identifier and the revision of the updated documents. In each entry, the attribute _id contains the known document-id of each updated document, _key contains the key which uniquely identifies a document in a given collection, and the attribute _rev contains the new document revision. In case of an error or violated precondition, an error object with the attribute error set to true and the attribute errorCode set to the error code is built.

If the query parameter returnOld is true, then, for each generated document, the complete previous revision of the document is returned under the old attribute in the result.

If the query parameter returnNew is true, then, for each generated document, the complete new document is returned under the new attribute in the result.

Note that if any precondition is violated or an error occurred with some of the documents, the return code is still 201 or 202, but the additional HTTP header X-Arango-Error-Codes is set, which contains a map of the error codes that occurred together with their multiplicities, as in: 1200:17,1205:10 which means that in 17 cases the error 1200 “revision conflict” and in 10 cases the error 1205 “illegal document handle” has happened.

Responses

HTTP 201: is returned if waitForSync was true and operations were processed.

HTTP 202: is returned if waitForSync was false and operations were processed.

HTTP 400: is returned if the body does not contain a valid JSON representation of an array of documents. The response body contains an error document in this case.

HTTP 404: is returned if the collection was not found.

Removes multiple documents

removes multiple document

DELETE /_api/document/{collection}

Path Parameters

  • collection (string, required): Collection from which documents are removed.

Query Parameters

  • waitForSync (boolean, optional): Wait until deletion operation has been synced to disk.

  • returnOld (boolean, optional): Return additionally the complete previous revision of the changed document under the attribute old in the result.

  • ignoreRevs (boolean, optional): If set to true, ignore any _rev attribute in the selectors. No revision check is performed. If set to false then revisions are checked. The default is true.

Request Body

(json, required)

A JSON array of strings or documents.

The body of the request is an array consisting of selectors for documents. A selector can either be a string with a key or a string with a document identifier or an object with a _key attribute. This API call removes all specified documents from collection. If the ignoreRevs query parameter is false and the selector is an object and has a _rev attribute, it is a precondition that the actual revision of the removed document in the collection is the specified one.

The body of the response is an array of the same length as the input array. For each input selector, the output contains a JSON object with the information about the outcome of the operation. If no error occurred, an object is built in which the attribute _id contains the known document-id of the removed document, _key contains the key which uniquely identifies a document in a given collection, and the attribute _rev contains the document revision. In case of an error, an object with the attribute error set to true and errorCode set to the error code is built.

If the waitForSync parameter is not specified or set to false, then the collection’s default waitForSync behavior is applied. The waitForSync query parameter cannot be used to disable synchronization for collections that have a default waitForSync value of true.

If the query parameter returnOld is true, then the complete previous revision of the document is returned under the old attribute in the result.

Note that if any precondition is violated or an error occurred with some of the documents, the return code is still 200 or 202, but the additional HTTP header X-Arango-Error-Codes is set, which contains a map of the error codes that occurred together with their multiplicities, as in: 1200:17,1205:10 which means that in 17 cases the error 1200 “revision conflict” and in 10 cases the error 1205 “illegal document handle” has happened.

Responses

HTTP 200: is returned if waitForSync was true.

HTTP 202: is returned if waitForSync was false.

HTTP 404: is returned if the collection was not found. The response body contains an error document in this case.

Examples

Using document keys:

shell> curl -X DELETE --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
[ 
  "1", 
  "2" 
]
EOF

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 107
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Using document identifiers:

shell> curl -X DELETE --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
[ 
  "products/1", 
  "products/2" 
]
EOF

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 107
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Using objects with document keys:

shell> curl -X DELETE --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
[ 
  { 
    "_key" : "1" 
  }, 
  { 
    "_key" : "2" 
  } 
]
EOF

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 107
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Unknown documents:

shell> curl -X DELETE --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products <<EOF
[ 
  "1", 
  "other/2" 
]
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 135
server: ArangoDB
x-arango-error-codes: {"1202":2}
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Check revisions:

shell> curl -X DELETE --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products?ignoreRevs=false <<EOF
[ 
  { 
    "_key" : "1", 
    "_rev" : "_eLYWljG--_" 
  }, 
  { 
    "_key" : "2", 
    "_rev" : "_eLYWljG--A" 
  } 
]
EOF

HTTP/1.1 200 OK
content-type: application/json
connection: Keep-Alive
content-length: 107
server: ArangoDB
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body

Revision conflict:

shell> curl -X DELETE --header 'accept: application/json' --data-binary @- --dump - http://localhost:8529/_api/document/products?ignoreRevs=false <<EOF
[ 
  { 
    "_key" : "1", 
    "_rev" : "non-matching revision" 
  }, 
  { 
    "_key" : "2", 
    "_rev" : "non-matching revision" 
  } 
]
EOF

HTTP/1.1 202 Accepted
content-type: application/json
connection: Keep-Alive
content-length: 167
server: ArangoDB
x-arango-error-codes: {"1200":2}
x-arango-queue-time-seconds: 0.000000
x-content-type-options: nosniff
Show response body