2012-07-26 4 views
6

Мне нужно получить документ, изменить/вставить/удалить некоторые поля и вернуть их обратно.Обновление документа CouchDB в nano

«положить» действие требует текущей ревизии документа, но в nano я не могу найти какую-либо функцию, которая принимает ревизию в качестве параметра и вставляет документ обратно в базу данных.

Как это сделать с помощью nano?

ответ

7

Примечание: Это общий алгоритм, он не является специфическим для какой-либо библиотеки, поскольку метод nano's insert() не предлагает ничего автоматизированного для обновления документов.

Получить документ, сохранить текущую версию, применить изменения и попытаться отправить документ с сохраненным номером ревизии.

Обязательно обработайте возможные 409 ответов на конфликт, которые возникают, когда документ был изменен между тем.

В этом случае вы должны восстановить документ, сохранить номер версии, повторно применить свои изменения, а затем попытаться отправить его снова с новой ревизией.

Так вот алгоритм:

  1. Получить документ
  2. Сохранить _rev
  3. Применить изменения
  4. Попробуйте отправить обновленный документ с сохраненным _rev
  5. Перейти к шагу 1 в случае a 409

Оформить заказ CouchDB HTTP Document API's PUT section и CouchDB's Replication and Conflicts для получения дополнительной информации. Вы также можете найти How To Update A Document With Nano (The CouchDB Client for Node.js).

+0

Я знаю, что мне нужна ревизия. Вопрос в том, что является функцией с аргументом «ревизии» в nano. Правильный ответ, но по другому вопросу. – DSblizzard

+1

Это правильный ответ даже для вашего вопроса. Просто прочитайте документацию [nano's Document API] (https://github.com/dscape/nano#document-functions). Существует только метод 'inser()', который означает, что вы должны установить правильную версию документа, который хотите вставить. –

+0

Можете ли вы показать код, пожалуйста? – DSblizzard

Смежные вопросы