Batches: How to send multiple commands using a batch?
To send multiple operations in a single request, reducing the number of remote calls and allowing several operations to share same transaction, bulk_docs
endpoint should be used.
Syntax
curl \
http://{serverName}/databases/{databaseName}/bulk_docs \
-X POST \
-d @commands.txt
Request
Payload |
---|
A serialized array of following commands: - PutCommandData - DeleteCommandData - PatchCommandData - ScriptedPatchCommandData Commands to process. |
Response
Status code | Description |
---|---|
200 |
OK |
Return Value | Description |
---|---|
BatchResult[] | An array of batch results matching exactly the order of commands send. |
Example
curl -X POST "http://localhost:8080/databases/NorthWind/bulk_docs"
-d
[
{"Document":
{"Name":"My Product","Supplier":"suppliers/999","Id":null},
"Key":"products/999",
"Method":"PUT",
"AdditionalData":null,
"Metadata":{}
},{
"Document":
{"Name":"My Supplier","Id":null},
"Key":"suppliers/999",
"Method":"PUT",
"AdditionalData":null,
"Metadata":{}
},{
"Key":"products/2",
"Method":"DELETE",
"AdditionalData":null,
"Etag":null}
]
< HTTP/1.1 200 OK
[
{
"Etag":"01000000-0000-0009-0000-000000000001",
"Method":"PUT",
"Key":"products/999",
"Metadata":{"Last-Modified":"2014-11-12T11:38:42.3180730Z"},
"AdditionalData":null,
"PatchResult":null,
"Deleted":null
},
{
"Etag":"01000000-0000-0009-0000-000000000002",
"Method":"PUT",
"Key":"suppliers/999",
"Metadata":{"Last-Modified":"2014-11-12T11:38:42.3180730Z"},
"AdditionalData":null,
"PatchResult":null,
"Deleted":null
},
{
"Etag":null,
"Method":"DELETE",
"Key":"products/2",
"Metadata":null,
"AdditionalData":null,
"PatchResult":null,
"Deleted":true
}
]
Concurrency
If an ETag is specified in the command, that ETag is compared to the current ETag on the document on the server. If the ETag does not match, a 409 Conflict status code will be returned from the server, causing a ConcurrencyException to be thrown. In such a case, the entire operation fails and non of the updates that were attempted will succeed.
Transactions
All the operations in the batch will succeed or fail as a transaction. Other users will not be able to see any of the changes until the entire batch completes.