| {% include anchor.html edit="true" title="Create/update a batch of documents" hash="batch_create" %} | |
| {% highlight js %} | |
| db.bulkDocs(docs, [options], [callback]) | |
| {% endhighlight %} | |
| Create, update or delete multiple documents. The `docs` argument is an array of documents. | |
| If you omit an `_id` parameter on a given document, the database will create a new document and assign the ID for you. To update a document, you must include both an `_id` parameter and a `_rev` parameter, which should match the ID and revision of the document on which to base your updates. Finally, to delete a document, include a `_deleted` parameter with the value `true`. | |
| #### Example Usage: | |
| Put some new docs, providing the `_id`s: | |
| {% include code/start.html id="bulk_docs_1" type="callback" %} | |
| {% highlight js %} | |
| db.bulkDocs([ | |
| {title : 'Lisa Says', _id: 'doc1'}, | |
| {title : 'Space Oddity', _id: 'doc2'} | |
| ], function(err, response) { | |
| if (err) { return console.log(err); } | |
| // handle result | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="bulk_docs_1" type="async" %} | |
| {% highlight js %} | |
| try { | |
| var result = await db.bulkDocs([ | |
| {title : 'Lisa Says', _id: 'doc1'}, | |
| {title : 'Space Oddity', _id: 'doc2'} | |
| ]); | |
| } catch (err) { | |
| console.log(err); | |
| } | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="bulk_docs_1" type="promise" %} | |
| {% highlight js %} | |
| db.bulkDocs([ | |
| {title : 'Lisa Says', _id: 'doc1'}, | |
| {title : 'Space Oddity', _id: 'doc2'} | |
| ]).then(function (result) { | |
| // handle result | |
| }).catch(function (err) { | |
| console.log(err); | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| Post some new docs and auto-generate the `_id`s: | |
| {% include code/start.html id="bulk_docs_2" type="callback" %} | |
| {% highlight js %} | |
| db.bulkDocs([ | |
| {title : 'Lisa Says'}, | |
| {title : 'Space Oddity'} | |
| ], function(err, response) { | |
| if (err) { return console.log(err); } | |
| // handle result | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="bulk_docs_2" type="async" %} | |
| {% highlight js %} | |
| try { | |
| var result = await db.bulkDocs([ | |
| {title : 'Lisa Says'}, | |
| {title : 'Space Oddity'} | |
| ]); | |
| } catch (err) { | |
| console.log(err); | |
| } | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="bulk_docs_2" type="promise" %} | |
| {% highlight js %} | |
| db.bulkDocs([ | |
| {title : 'Lisa Says'}, | |
| {title : 'Space Oddity'} | |
| ]).then(function (result) { | |
| // handle result | |
| }).catch(function (err) { | |
| console.log(err); | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| #### Example Response: | |
| {% highlight js %} | |
| [ | |
| { | |
| "ok": true, | |
| "id": "doc1", | |
| "rev": "1-84abc2a942007bee7cf55007cba56198" | |
| }, | |
| { | |
| "ok": true, | |
| "id": "doc2", | |
| "rev": "1-7b80fc50b6af7a905f368670429a757e" | |
| } | |
| ] | |
| {% endhighlight %} | |
| The response contains an array of the familiar `ok`/`rev`/`id` | |
| from the [put()/post() API](#create_document). If there are any errors, they | |
| will be provided individually like so: | |
| {% highlight js %} | |
| [ | |
| { status: 409, | |
| name: 'conflict', | |
| message: 'Document update conflict', | |
| error: true | |
| } | |
| ] | |
| {% endhighlight %} | |
| The results are returned in the same order as the supplied "docs" array. | |
| Note that `bulkDocs()` is not transactional, and that you may get | |
| back a mixed array of errors/non-errors. In CouchDB/PouchDB, the smallest | |
| atomic unit is the document. | |
| #### Bulk update/delete: | |
| You can also use `bulkDocs()` to update/delete many documents at once: | |
| {% include code/start.html id="bulk_docs3" type="callback" %} | |
| {% highlight js %} | |
| db.bulkDocs([ | |
| { | |
| title : 'Lisa Says', | |
| artist : 'Velvet Underground', | |
| _id : "doc1", | |
| _rev : "1-84abc2a942007bee7cf55007cba56198" | |
| }, | |
| { | |
| title : 'Space Oddity', | |
| artist : 'David Bowie', | |
| _id : "doc2", | |
| _rev : "1-7b80fc50b6af7a905f368670429a757e" | |
| } | |
| ], function(err, response) { | |
| if (err) { return console.log(err); } | |
| // handle result | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="bulk_docs3" type="async" %} | |
| {% highlight js %} | |
| try { | |
| var result = await db.bulkDocs([ | |
| { | |
| title : 'Lisa Says', | |
| artist : 'Velvet Underground', | |
| _id : "doc1", | |
| _rev : "1-84abc2a942007bee7cf55007cba56198" | |
| }, | |
| { | |
| title : 'Space Oddity', | |
| artist : 'David Bowie', | |
| _id : "doc2", | |
| _rev : "1-7b80fc50b6af7a905f368670429a757e" | |
| } | |
| ]); | |
| } catch (err) { | |
| console.log(err); | |
| } | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="bulk_docs3" type="promise" %} | |
| {% highlight js %} | |
| db.bulkDocs([ | |
| { | |
| title : 'Lisa Says', | |
| artist : 'Velvet Underground', | |
| _id : "doc1", | |
| _rev : "1-84abc2a942007bee7cf55007cba56198" | |
| }, | |
| { | |
| title : 'Space Oddity', | |
| artist : 'David Bowie', | |
| _id : "doc2", | |
| _rev : "1-7b80fc50b6af7a905f368670429a757e" | |
| } | |
| ]).then(function (result) { | |
| // handle result | |
| }).catch(function (err) { | |
| console.log(err); | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| Or delete them: | |
| {% include code/start.html id="bulk_docs_4" type="callback" %} | |
| {% highlight js %} | |
| db.bulkDocs([ | |
| { | |
| title : 'Lisa Says', | |
| _deleted : true, | |
| _id : "doc1", | |
| _rev : "1-84abc2a942007bee7cf55007cba56198" | |
| }, | |
| { | |
| title : 'Space Oddity', | |
| _deleted : true, | |
| _id : "doc2", | |
| _rev : "1-7b80fc50b6af7a905f368670429a757e" | |
| } | |
| ], function(err, response) { | |
| if (err) { return console.log(err); } | |
| // handle result | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="bulk_docs_4" type="async" %} | |
| {% highlight js %} | |
| try { | |
| var result = await db.bulkDocs([ | |
| { | |
| title : 'Lisa Says', | |
| _deleted : true, | |
| _id : "doc1", | |
| _rev : "1-84abc2a942007bee7cf55007cba56198" | |
| }, | |
| { | |
| title : 'Space Oddity', | |
| _deleted : true, | |
| _id : "doc2", | |
| _rev : "1-7b80fc50b6af7a905f368670429a757e" | |
| } | |
| ]); | |
| } catch (err) { | |
| console.log(err); | |
| } | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| {% include code/start.html id="bulk_docs_4" type="promise" %} | |
| {% highlight js %} | |
| db.bulkDocs([ | |
| { | |
| title : 'Lisa Says', | |
| _deleted : true, | |
| _id : "doc1", | |
| _rev : "1-84abc2a942007bee7cf55007cba56198" | |
| }, | |
| { | |
| title : 'Space Oddity', | |
| _deleted : true, | |
| _id : "doc2", | |
| _rev : "1-7b80fc50b6af7a905f368670429a757e" | |
| } | |
| ]).then(function (result) { | |
| // handle result | |
| }).catch(function (err) { | |
| console.log(err); | |
| }); | |
| {% endhighlight %} | |
| {% include code/end.html %} | |
| **Note:** You can also specify a `new_edits` property on the options object that when set to `false` allows you to post [existing documents from other databases](http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API#Posting_Existing_Revisions). This will not allow you to edit existing local documents and normally only the replication algorithm needs to do this. |