{% 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.
