/{db}/_all_docs
-
GET/{db}/_all_docs -
Выполняет встроенное _all_docs представление, возвращая все документы из базы данных. За исключением параметров URL (описанных ниже), эта конечная точка работает так же, как и любое другое представление. Полное описание доступных параметров запроса и формата возвращаемых данных см. в документации конечной точки представления.
- Параметры:
-
db – Имя базы данных
- Заголовки запроса:
-
Content-Type – application/json
- Заголовки ответа:
-
-
application/json
-
- Коды состояния:
-
200 ОК – Запрос успешно выполнен
401 Не авторизован – Неавторизованный запрос к защищённому API
403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными
404 Не найдено – Запрошенная база данных не найдена
Запрос:
GET /db/_all_docs HTTP/1.1 Accept: application/json Host: localhost:5984
Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Sat, 10 Aug 2013 16:22:56 GMT ETag: "1W2DJUZFZSZD9K78UFA3GZWB4" Server: CouchDB (Erlang/OTP) Transfer-Encoding: chunked { "offset": 0, "rows": [ { "id": "16e458537602f5ef2a710089dffd9453", "key": "16e458537602f5ef2a710089dffd9453", "value": { "rev": "1-967a00dff5e02add41819138abb3284d" } }, { "id": "a4c51cdfa2069f3e905c431114001aff", "key": "a4c51cdfa2069f3e905c431114001aff", "value": { "rev": "1-967a00dff5e02add41819138abb3284d" } }, { "id": "a4c51cdfa2069f3e905c4311140034aa", "key": "a4c51cdfa2069f3e905c4311140034aa", "value": { "rev": "5-6182c9c954200ab5e3c6bd5e76a1549f" } }, { "id": "a4c51cdfa2069f3e905c431114003597", "key": "a4c51cdfa2069f3e905c431114003597", "value": { "rev": "2-7051cbe5c8faecd085a3fa619e6e6337" } }, { "id": "f4ca7773ddea715afebc4b4b15d4f0b3", "key": "f4ca7773ddea715afebc4b4b15d4f0b3", "value": { "rev": "2-7051cbe5c8faecd085a3fa619e6e6337" } } ], "total_rows": 5 }
-
POST/{db}/_all_docs -
Функция POST _all_docs поддерживает те же параметры и поведение, что и API
GET /{db}/_all_docs, но позволяет передавать параметры строки запроса в виде ключей JSON-объекта в теле запроса POST.Запрос:
POST /db/_all_docs HTTP/1.1 Accept: application/json Content-Length: 70 Content-Type: application/json Host: localhost:5984 { "keys" : [ "Zingylemontart", "Yogurtraita" ] }Ответ:
{ "total_rows" : 2666, "rows" : [ { "value" : { "rev" : "1-a3544d296de19e6f5b932ea77d886942" }, "id" : "Zingylemontart", "key" : "Zingylemontart" }, { "value" : { "rev" : "1-91635098bfe7d40197a1b98d7ee085fc" }, "id" : "Yogurtraita", "key" : "Yogurtraita" } ], "offset" : 0 }
/{db}/_design_docs
Добавлено в версии 2.2.
-
GET/{db}/_design_docs -
Возвращает структуру JSON со всеми документами дизайна в указанной базе данных. Информация возвращается в виде структуры JSON, содержащей метаданные о структуре ответа, включая список всех документов дизайна и их основные данные: идентификатор, ревизию и ключ. Ключ — это
_idдокумента дизайна.- Параметры:
-
db – Имя базы данных
- Заголовки запроса:
-
-
Accept –
application/json
text/plain
-
- Параметры запроса:
-
conflicts (boolean) – Включает сведения о conflicts в ответ. Игнорируется, если include_docs не равен
true. По умолчанию —false.descending (boolean) – Возвращать документы дизайна в порядке убывания ключа. По умолчанию —
false.endkey (string) – Прекратить возвращать записи при достижении указанного ключа. Необязательный параметр.
end_key (string) – Псевдоним параметра endkey.
endkey_docid (string) – Прекратить возвращать записи при достижении указанного идентификатора документа дизайна. Необязательный параметр.
end_key_doc_id (string) – Псевдоним параметра endkey_docid.
include_docs (boolean) – Включать полный текст документов дизайна в ответ. По умолчанию —
false.inclusive_end (boolean) – Указывает, следует ли включать указанный конечный ключ в результат. По умолчанию —
true.key (string) – Возвращать только документы дизайна, соответствующие указанному ключу. Необязательный параметр.
keys (string) – Возвращать только документы дизайна, соответствующие указанным ключам. Необязательный параметр.
limit (number) – Ограничить количество возвращаемых документов дизайна указанным числом. Необязательный параметр.
skip (number) – Пропустить указанное количество записей перед началом возврата результатов. По умолчанию —
0.startkey (string) – Возвращать записи, начиная с указанного ключа. Необязательный параметр.
start_key (string) – Псевдоним параметра startkey.
startkey_docid (string) – Возвращать записи, начиная с указанного идентификатора документа дизайна. Необязательный параметр.
start_key_doc_id (string) – Псевдоним параметра startkey_docid.
update_seq (boolean) – Ответ содержит значение
update_seq, указывающее, какой идентификатор последовательности базовой базы данных отражает представление. По умолчанию —false.
- Заголовки ответа:
-
-
application/json
text/plain; charset=utf-8
ETag – Подпись ответа
-
- Объект JSON ответа:
-
offset (number) – Смещение, с которого начинается список документов дизайна
rows (array) – Массив объектов строк представления. По умолчанию возвращаемые данные содержат только идентификатор и ревизию документа дизайна.
total_rows (number) – Количество документов дизайна в базе данных. Обратите внимание, что это не количество строк, возвращённых фактическим запросом.
update_seq (number) – Текущая последовательность обновлений базы данных
- Коды состояния:
-
200 ОК – Запрос успешно выполнен
401 Не авторизован – Неавторизованный запрос к защищённому API
403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными
404 Не найдено – Запрошенная база данных не найдена
Запрос:
GET /db/_design_docs HTTP/1.1 Accept: application/json Host: localhost:5984
Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Sat, 23 Dec 2017 16:22:56 GMT ETag: "1W2DJUZFZSZD9K78UFA3GZWB4" Server: CouchDB (Erlang/OTP) Transfer-Encoding: chunked { "offset": 0, "rows": [ { "id": "_design/ddoc01", "key": "_design/ddoc01", "value": { "rev": "1-7407569d54af5bc94c266e70cbf8a180" } }, { "id": "_design/ddoc02", "key": "_design/ddoc02", "value": { "rev": "1-d942f0ce01647aa0f46518b213b5628e" } }, { "id": "_design/ddoc03", "key": "_design/ddoc03", "value": { "rev": "1-721fead6e6c8d811a225d5a62d08dfd0" } }, { "id": "_design/ddoc04", "key": "_design/ddoc04", "value": { "rev": "1-32c76b46ca61351c75a84fbcbceece2f" } }, { "id": "_design/ddoc05", "key": "_design/ddoc05", "value": { "rev": "1-af856babf9cf746b48ae999645f9541e" } } ], "total_rows": 5 }
-
POST/{db}/_design_docs -
Функция POST _design_docs поддерживает те же параметры и поведение, что и API
GET /{db}/_design_docs, но позволяет передавать параметры строки запроса в виде ключей JSON-объекта в теле запроса POST.Запрос:
POST /db/_design_docs HTTP/1.1 Accept: application/json Content-Length: 70 Content-Type: application/json Host: localhost:5984 { "keys" : [ "_design/ddoc02", "_design/ddoc05" ] }Возвращаемый JSON имеет структуру всех документов, но в выходных данных содержит только выбранные ключи:
Ответ:
{ "total_rows" : 5, "rows" : [ { "value" : { "rev" : "1-d942f0ce01647aa0f46518b213b5628e" }, "id" : "_design/ddoc02", "key" : "_design/ddoc02" }, { "value" : { "rev" : "1-af856babf9cf746b48ae999645f9541e" }, "id" : "_design/ddoc05", "key" : "_design/ddoc05" } ], "offset" : 0 }
Отправка нескольких запросов к базе данных
/{db}/_all_docs/queries
Добавлено в версии 2.2.
-
POST/{db}/_all_docs/queries -
Выполняет несколько указанных запросов к встроенному представлению всех документов этой базы данных. Это позволяет запрашивать несколько результатов одним запросом вместо нескольких запросов
POST /{db}/_all_docs.- Параметры:
-
db – Имя базы данных
- Заголовки запроса:
-
-
application/json
-
Accept –
application/json
-
- Объект JSON запроса:
-
queries – Массив объектов запросов с полями, задающими параметры каждого отдельного запроса к представлению. Имена полей и их значения совпадают с параметрами запроса обычного запроса _all_docs.
- Заголовки ответа:
-
-
application/json
text/plain; charset=utf-8
ETag – Подпись ответа
Transfer-Encoding –
chunked
-
- Объект JSON ответа:
-
results (array) – Массив объектов результатов — по одному для каждого запроса. Каждый объект результата содержит те же поля, что и ответ на обычный запрос _all_docs.
- Коды состояния:
-
200 ОК – Запрос успешно выполнен
400 Неверный запрос – Недопустимый запрос
401 Не авторизован – Неавторизованный запрос к защищённому API
403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными
404 Не найдено – Указанная база данных отсутствует
500 Внутренняя ошибка сервера – Ошибка выполнения запроса
Запрос:
POST /db/_all_docs/queries HTTP/1.1 Content-Type: application/json Accept: application/json Host: localhost:5984 { "queries": [ { "keys": [ "meatballs", "spaghetti" ] }, { "limit": 3, "skip": 2 } ] }Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Wed, 20 Dec 2017 11:17:07 GMT ETag: "1H8RGBCK3ABY6ACDM7ZSC30QK" Server: CouchDB (Erlang/OTP) Transfer-Encoding: chunked { "results" : [ { "rows": [ { "id": "meatballs", "key": "meatballs", "value": 1 }, { "id": "spaghetti", "key": "spaghetti", "value": 1 } ], "total_rows": 3 }, { "offset" : 2, "rows" : [ { "id" : "Adukiandorangecasserole-microwave", "key" : "Aduki and orange casserole - microwave", "value" : [ null, "Aduki and orange casserole - microwave" ] }, { "id" : "Aioli-garlicmayonnaise", "key" : "Aioli - garlic mayonnaise", "value" : [ null, "Aioli - garlic mayonnaise" ] }, { "id" : "Alabamapeanutchicken", "key" : "Alabama peanut chicken", "value" : [ null, "Alabama peanut chicken" ] } ], "total_rows" : 2667 } ] }Примечание
Несколько запросов также поддерживаются в /{db}/_local_docs/queries и /{db}/_design_docs/queries (аналогично /{db}/_all_docs/queries).
/{db}/_design_docs/queries
-
POST/{db}/_design_docs/queries -
Запрос с указанным
keysвернёт только документы дизайна. Можно также объединятьkeysс другими параметрами запроса, напримерlimitиskip.- Параметры:
-
db – Имя базы данных
- Заголовки запроса:
-
-
application/json
-
Accept –
application/json
-
- Объект JSON запроса:
-
queries – Массив объектов запросов с полями, задающими параметры каждого отдельного запроса к представлению. Имена полей и их значения совпадают с параметрами запроса обычного запроса _design_docs.
- Заголовки ответа:
-
-
application/json
text/plain; charset=utf-8
Transfer-Encoding –
chunked
-
- Объект JSON ответа:
-
results (array) – Массив объектов результатов — по одному для каждого запроса. Каждый объект результата содержит те же поля, что и ответ на обычный запрос _design_docs.
- Коды состояния:
-
200 ОК – Запрос успешно выполнен
400 Неверный запрос – Недопустимый запрос
401 Не авторизован – Неавторизованный запрос к защищённому API
403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными
404 Не найдено – Указанная база данных отсутствует
500 Внутренняя ошибка сервера – Ошибка выполнения запроса
Запрос:
POST /db/_design_docs/queries HTTP/1.1 Content-Type: application/json Accept: application/json Host: localhost:5984 { "queries": [ { "keys": [ "_design/recipe", "_design/not-exist", "spaghetti" ] } ] }Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Thu, 20 Jul 2023 20:06:44 GMT Server: CouchDB (Erlang/OTP) Transfer-Encoding: chunked { "results": [ { "total_rows": 1, "offset": null, "rows": [ { "id": "_design/recipe", "key": "_design/recipe", "value": { "rev": "1-ad0e29fe6b473658514742a7c2317766" } }, { "key": "_design/not-exist", "error": "not_found" } ] } ] }Примечание
/{db}/_design_docs/queries с ключами возвращает только документы дизайна или
"error": "not_found", если документ дизайна не существует. Еслиkeyне является идентификатором документа дизайна, он не будет включён в ответ.
/{db}/_bulk_get
-
POST/{db}/_bulk_get -
Этот метод можно использовать для пакетного запроса нескольких документов. Он хорошо подходит для получения определённой ревизии документов, например при репликации, а также для получения истории ревизий. Полное описание доступных параметров запроса см. в документации конечной точки документа.
- Параметры:
-
db – Имя базы данных
- Заголовки запроса:
-
-
Accept –
application/json
multipart/related
multipart/mixed
Content-Type – application/json
-
- Объект JSON запроса:
-
docs (array) – Список объектов документов с
idи необязательнымиrevиatts_since
- Заголовки ответа:
-
-
application/json
-
- Объект JSON ответа:
-
results (object) – массив результатов для каждой запрошенной пары документ/ревизия. Ключ
idсодержит запрошенный идентификатор документа,docsсодержит массив из одного элемента с объектом, в котором есть либо ключerrorи значение с описанием ошибки, либо ключokи соответствующее значение запрошенного документа, а также дополнительное свойство_revisionsсо списком родительских ревизий, еслиrevs=true.
- Коды состояния:
-
200 ОК – Запрос успешно выполнен
400 Неверный запрос – В запросе переданы недопустимые данные JSON или недопустимый параметр запроса
401 Не авторизован – Неавторизованный запрос к защищённому API
403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными
404 Не найдено – Недопустимое имя базы данных
415 Неподдерживаемый тип медиа – Недопустимое значение Content-Type
Запрос:
POST /db/_bulk_get HTTP/1.1 Accept: application/json Content-Type:application/json Host: localhost:5984 { "docs": [ { "id": "foo" "rev": "4-753875d51501a6b1883a9d62b4d33f91", }, { "id": "foo" "rev": "1-4a7e4ae49c4366eaed8edeaea8f784ad", }, { "id": "bar" } { "id": "baz" } ] }Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Mon, 19 Mar 2018 15:27:34 GMT Server: CouchDB (Erlang/OTP) { "results": [ { "id": "foo", "docs": [ { "ok": { "_id": "foo", "_rev": "4-753875d51501a6b1883a9d62b4d33f91", "value": "this is foo", "_revisions": { "start": 4, "ids": [ "753875d51501a6b1883a9d62b4d33f91", "efc54218773c6acd910e2e97fea2a608", "2ee767305024673cfb3f5af037cd2729", "4a7e4ae49c4366eaed8edeaea8f784ad" ] } } } ] }, { "id": "foo", "docs": [ { "ok": { "_id": "foo", "_rev": "1-4a7e4ae49c4366eaed8edeaea8f784ad", "value": "this is the first revision of foo", "_revisions": { "start": 1, "ids": [ "4a7e4ae49c4366eaed8edeaea8f784ad" ] } } } ] }, { "id": "bar", "docs": [ { "ok": { "_id": "bar", "_rev": "2-9b71d36dfdd9b4815388eb91cc8fb61d", "baz": true, "_revisions": { "start": 2, "ids": [ "9b71d36dfdd9b4815388eb91cc8fb61d", "309651b95df56d52658650fb64257b97" ] } } } ] }, { "id": "baz", "docs": [ { "error": { "id": "baz", "rev": "undefined", "error": "not_found", "reason": "missing" } } ] } ] }Пример ответа с конфликтующим документом:
Запрос:
POST /db/_bulk_get HTTP/1.1 Accept: application/json Content-Type:application/json Host: localhost:5984 { "docs": [ { "id": "a" } ] }Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Mon, 19 Mar 2018 15:27:34 GMT Server: CouchDB (Erlang/OTP) { "results": [ { "id": "a", "docs": [ { "ok": { "_id": "a", "_rev": "1-23202479633c2b380f79507a776743d5", "a": 1 } }, { "ok": { "_id": "a", "_rev": "1-967a00dff5e02add41819138abb3284d" } } ] } ] }
/{db}/_bulk_docs
-
POST/{db}/_bulk_docs -
API массовой обработки документов позволяет создавать и обновлять несколько документов одновременно в рамках одного запроса. Основная операция аналогична созданию или обновлению одного документа, за исключением того, что структура и данные документов передаются пакетно.
При создании новых документов идентификатор документа (
_id) указывать необязательно.Для обновления существующих документов необходимо указать идентификатор документа, данные о ревизии (
_rev) и новые значения документа.При пакетном удалении документов необходимо указать все поля: идентификатор документа, данные о ревизии и статус удаления (
_deleted).- Параметры:
-
db – Имя базы данных
- Заголовки запроса:
-
-
Accept –
application/json
text/plain
Content-Type – application/json
-
- Объект JSON запроса:
-
docs (array) – Список объектов документов
new_edits (boolean) – Если
false, база данных не будет назначать им новые идентификаторы ревизий. По умолчанию —true. Необязательно
- Заголовки ответа:
-
-
application/json
text/plain; charset=utf-8
-
- Массив объектов JSON в ответе:
-
id (string) – Идентификатор документа
rev (string) – Новый токен ревизии документа. Доступен, если документ сохранён без ошибок. Необязательно
error (string) – Тип ошибки. Необязательно
reason (string) – Причина ошибки. Необязательно
- Коды состояния:
-
201 Создано – Документы созданы или обновлены
400 Неверный запрос – В запросе переданы недопустимые данные JSON
401 Не авторизован – Неавторизованный запрос к защищённому API
403 Доступ запрещён – Недостаточно прав / Слишком много запросов с недействительными учётными данными
404 Не найдено – Запрошенная база данных не найдена
Запрос:
POST /db/_bulk_docs HTTP/1.1 Accept: application/json Content-Length: 109 Content-Type:application/json Host: localhost:5984 { "docs": [ { "_id": "FishStew" }, { "_id": "LambStew", "_rev": "2-0786321986194c92dd3b57dfbfc741ce", "_deleted": true } ] }Ответ:
HTTP/1.1 201 Created Cache-Control: must-revalidate Content-Length: 144 Content-Type: application/json Date: Mon, 12 Aug 2013 00:15:05 GMT Server: CouchDB (Erlang/OTP) [ { "ok": true, "id": "FishStew", "rev":" 1-967a00dff5e02add41819138abb3284d" }, { "ok": true, "id": "LambStew", "rev": "3-f9c62b2169d0999103e9f41949090807" } ]
Пакетная вставка документов
Каждый раз, когда документ сохраняется или обновляется в CouchDB, обновляется внутренняя B-деревоподобная структура. Пакетная вставка повышает эффективность использования пространства хранения и сокращает время выполнения, объединяя множество обновлений промежуточных узлов B-дерева.
Она не предназначена для выполнения в CouchDB транзакций, подобных транзакциям ACID: единственная граница транзакции в CouchDB — это одно обновление одной базы данных. Ограничения подробно описаны в разделе Семантика транзакций при пакетной обработке документов.
Чтобы пакетно вставить документы в базу данных, необходимо передать структуру JSON с массивом документов, которые требуется добавить в базу данных. Можно указать идентификатор документа или разрешить сгенерировать его автоматически.
Например, следующий запрос вставляет три новых документа: для двух указаны идентификаторы, а для одного идентификатор будет сгенерирован:
POST /source/_bulk_docs HTTP/1.1
Accept: application/json
Content-Length: 323
Content-Type: application/json
Host: localhost:5984
{
"docs": [
{
"_id": "FishStew",
"servings": 4,
"subtitle": "Delicious with freshly baked bread",
"title": "FishStew"
},
{
"_id": "LambStew",
"servings": 6,
"subtitle": "Serve with a whole meal scone topping",
"title": "LambStew"
},
{
"servings": 8,
"subtitle": "Hand-made dumplings make a great accompaniment",
"title": "BeefStew"
}
]
} В ответ на пакетную вставку возвращается тип 201 Создано; содержимое возвращённой структуры указывает на успех или ошибку для каждого документа.
Возвращённая структура из приведённого выше примера содержит список созданных документов, здесь — сочетание их идентификаторов и идентификаторов ревизий:
HTTP/1.1 201 Created
Cache-Control: must-revalidate
Content-Length: 215
Content-Type: application/json
Date: Sat, 26 Oct 2013 00:10:39 GMT
Server: CouchDB (Erlang OTP)
[
{
"id": "FishStew",
"ok": true,
"rev": "1-6a466d5dfda05e613ba97bd737829d67"
},
{
"id": "LambStew",
"ok": true,
"rev": "1-648f1b989d52b8e43f05aa877092cc7c"
},
{
"id": "00a271787f89c0ef2e10e88a0c0003f0",
"ok": true,
"rev": "1-e4602845fc4c99674f50b1d5a804fdfa"
}
] Подробное описание семантики и структуры возвращаемого JSON см. в разделе Семантика транзакций при пакетной обработке документов. Конфликты и ошибки проверки при пакетном обновлении документов необходимо обрабатывать отдельно; см. раздел Проверка документов при пакетной обработке и ошибки конфликтов.
Пакетное обновление документов
Процедура пакетного обновления документов аналогична процедуре вставки, за исключением того, что для каждого документа в строке JSON пакетного обновления необходимо указать идентификатор документа и текущую ревизию.
Например, можно отправить следующий запрос:
POST /recipes/_bulk_docs HTTP/1.1
Accept: application/json
Content-Length: 464
Content-Type: application/json
Host: localhost:5984
{
"docs": [
{
"_id": "FishStew",
"_rev": "1-6a466d5dfda05e613ba97bd737829d67",
"servings": 4,
"subtitle": "Delicious with freshly baked bread",
"title": "FishStew"
},
{
"_id": "LambStew",
"_rev": "1-648f1b989d52b8e43f05aa877092cc7c",
"servings": 6,
"subtitle": "Serve with a whole meal scone topping",
"title": "LambStew"
},
{
"_id": "BeefStew",
"_rev": "1-e4602845fc4c99674f50b1d5a804fdfa",
"servings": 8,
"subtitle": "Hand-made dumplings make a great accompaniment",
"title": "BeefStew"
}
]
} Возвращённая структура содержит JSON обновлённых документов с информацией о новых ревизиях и идентификаторах:
HTTP/1.1 201 Created
Cache-Control: must-revalidate
Content-Length: 215
Content-Type: application/json
Date: Sat, 26 Oct 2013 00:10:39 GMT
Server: CouchDB (Erlang OTP)
[
{
"id": "FishStew",
"ok": true,
"rev": "2-2bff94179917f1dec7cd7f0209066fb8"
},
{
"id": "LambStew",
"ok": true,
"rev": "2-6a7aae7ac481aa98a2042718d09843c4"
},
{
"id": "BeefStew",
"ok": true,
"rev": "2-9801936a42f06a16f16c30027980d96f"
}
] Во время пакетного обновления можно удалить документы, добавив поле _deleted со значением true для каждой пары идентификатора документа и ревизии в отправляемой структуре JSON.
В ответ на пакетную вставку возвращается тип 201 Создано; содержимое возвращённой структуры указывает на успех или ошибку для каждого документа.
Содержимое и структура возвращаемого JSON зависят от семантики транзакций, используемой для пакетного обновления; дополнительную информацию см. в разделе Семантика транзакций при пакетной обработке документов. Конфликты и ошибки проверки при пакетном обновлении документов необходимо обрабатывать отдельно; см. раздел Проверка документов при пакетной обработке и ошибки конфликтов.
Семантика транзакций при пакетной обработке документов
Операции пакетной обработки документов неатомарны. Это означает, что CouchDB не гарантирует сохранение какого-либо отдельного документа, включённого в пакетное обновление (или вставку), после отправки запроса. В ответе будет содержаться список документов, успешно вставленных или обновлённых в ходе операции. В случае сбоя некоторые документы могут быть успешно сохранены, а остальные — потеряны.
В структуре ответа будет указано, был ли документ обновлён: для этого передаётся новый параметр _rev, указывающий на создание новой ревизии документа. Если обновление не удалось, будет возвращён error типа conflict. Например:
[
{
"id" : "FishStew",
"error" : "conflict",
"reason" : "Document update conflict."
},
{
"id" : "LambStew",
"error" : "conflict",
"reason" : "Document update conflict."
},
{
"id" : "BeefStew",
"error" : "conflict",
"reason" : "Document update conflict."
}
] В этом случае новая ревизия не создана, и для обновления документа необходимо повторно отправить его обновление с правильным тегом ревизии.
Репликация документов не зависит от типа вставки или обновления. Документы и ревизии, созданные при пакетной вставке или обновлении, реплицируются так же, как любые другие документы.
Проверка документов при пакетной обработке и ошибки конфликтов
JSON, возвращаемый операцией _bulk_docs, представляет собой массив структур JSON — по одной для каждого документа в исходном запросе. Необходимо проверить возвращённую структуру JSON, чтобы убедиться, что все документы из исходного запроса успешно добавлены в базу данных.
Если документ (или ревизия документа) не был корректно сохранён в базе данных из-за ошибки, проверьте поле error, чтобы определить тип ошибки и необходимые действия. Возможны следующие типы ошибок:
-
conflict
Отправленный документ содержит конфликт. Новая ревизия не будет создана, и документ необходимо повторно отправить в базу данных.
Разрешение конфликтов документов, добавленных с помощью интерфейса пакетной обработки документов, выполняется так же, как и разрешение конфликтов при репликации.
-
forbidden
Записи с этим типом ошибки указывают на то, что процедура проверки, применённая к документу при отправке, вернула ошибку.
Например, если ваша процедура проверки содержит следующий код:
throw({forbidden: 'invalid recipe ingredient'});Возвращённый ответ с ошибкой будет выглядеть так:
HTTP/1.1 201 Created Cache-Control: must-revalidate Content-Length: 80 Content-Type: application/json Date: Sat, 26 Oct 2013 00:05:17 GMT Server: CouchDB (Erlang OTP) [ { "id": "LambStew", "error": "forbidden", "reason": "invalid recipe ingredient" } ]
Copyright © 2025 The Apache Software Foundation — Licensed under the Apache License 2.0
https://docs.couchdb.org/en/3.5.1/api/database/bulk-api.html