| {% 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 { |
| const 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 { |
| const 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 { |
| const 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 { |
| const 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:** If you set a `new_edits` property on the options object to `false`, you can post existing documents from other databases without having new revision IDs assigned to them. Normally, only the [replication algorithm](https://docs.couchdb.org/en/stable/replication/protocol.html?highlight=new_edits#upload-batch-of-changed-documents) needs to do this. |