Вы можете использовать API для массовых документов CouchDB для создания или обновления. Конечно, поскольку вы «летите вслепую» со значениями _rev
, компромисс заключается в том, что вы можете создавать конфликты версий. Это не может быть проблемой для вас, или в некоторых случаях это может быть невозможно или крайне редко (в зависимости от вашего приложения). Просто добавьте опцию "all_or_nothing":true
в ваше тело POST.
Кроме того, вы можете выполнить массовое создание или обновление в два этапа. Сначала извлеките все версии документов, затем отправьте традиционный запрос _bulk_docs
со всеми установленными значениями _rev
.
POST /database-dev/_all_docs
Content-Type: application/json
{"keys": ["id_1", "id_2", "bad_id"]}
HTTP/1.1 200 OK
...couch headers...
{"total_rows":10,"offset":0,"rows":[
{"id":"id_1","key":"id_1","value":{"rev":"1-6919deb28bdb1d4cf5b53188be5683be"}},
{"id":"id_2","key":"id_2","value":{"rev":"1-37bb8117bc6c7b182ca26aae16717408"}},
{"key":"bad_id", "error":"not_found"}
]}
(Вы можете сделать то же самое при запросе представления.)
Теперь вы знаете все значения для _rev
для отправки в _bulk_docs. (Если оно имеет значение "rev"
, используйте его, в противном случае оставьте _rev
, чтобы создать новый документ.)