Массовое обновление базы данных CouchDB без значения _rev на документ? - PullRequest
11 голосов
/ 08 августа 2011

Согласно CouchDB Wiki для операций PUT .

Чтобы обновить существующий документ, вы также выдаете запрос PUT.В этом случае тело JSON должно содержать свойство _rev , которое позволяет CouchDB знать, на какой ревизии основаны изменения.Если редакция документа, хранящегося в данный момент в базе данных, не совпадает, возвращается ошибка конфликта 409.

Моя цель - выполнить массовое обновление документов :

curl -X POST [domain]/[couch db name]/_bulk_docs -H "Content-type: application/json" -d @[some document].json

Мой рабочий процесс выглядит так:

  1. Мои данныенаходится в электронной таблице Google Docs.
  2. Я преобразовываю данные электронной таблицы в JSON, копируя и вставляя в Mr.Конвертер данных
  3. Я использую cURL (как показано выше) для добавления / обновления документов

Проблема в том, что при первом добавлении новых документов все работаетотлично, однако в следующий раз, когда я публикую те же документы, я получаю следующую ошибку для каждого документа:

... {"id": "28", "error": "конфликта", "причина ":" Конфликт обновления документа. "} ...

Есть ли способ обновить существующий документ без включения свойства _rev ?

1 Ответ

19 голосов
/ 09 августа 2011

В принципе вы не можете обновлять документ CouchDB вслепую, вы можете только пытаться обновить конкретную версию документа.

Для одного документа вы можете использовать Обработчик обновления CouchDB чтобы скрыть это от клиента, в качестве обработчика обновления будет передан существующий документ (если он существует), включая его ревизию.

Для коллекции документов при использовании _bulk_docs вы можете добавить "new_edits": falseкоторый будет принудительно вставлять конфликты вместо отклонения (хотя вам все равно нужно будет передать _rev , он просто не должен быть текущим).

Все, что сказано, этобыло бы лучше следовать правилам.Возьмите текущую версию документа, который вы хотите обновить, попробуйте обновить его, если вы получите 409, получите новую версию, объедините ее соответствующим образом и обновите снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...