批量更新CouchDB数据库而没有每个文档的_rev值?

edt*_*edt 11 couchdb

根据PUT操作CouchDB Wiki.

要更新现有文档,还要发出PUT请求.在这种情况下,JSON主体必须包含_rev属性,这使得CouchDB可以知道编辑所基于的修订版本.如果当前存储在数据库中的文档的修订版本不匹配,则返回409冲突错误.

我的目标是执行bulk_docs更新:

curl -X POST [domain]/[couch db name]/_bulk_docs -H "Content-type: application/json" -d @[some document].json
Run Code Online (Sandbox Code Playgroud)

我的工作流程是这样的:

  1. 我的数据位于Google文档电子表格中.
  2. 我通过复制和粘贴到数据转换器先生将电子表格数据转换为JSON
  3. 我使用cURL(如上所示)来添加/更新文档

问题是,我第一次添加新文档时,一切都运行正常,但是下次我发布相同的文档时,每个文档都会出现以下错误:

... {"id":"28","错误":"冲突","原因":"文档更新冲突."} ...

有没有办法在不包含_rev属性的情况下更新现有文档?

Rob*_*son 19

按照设计,您无法盲目更新CouchDB文档,只能尝试更新文档的特定版本.

对于单个文档,您可以使用CouchDB更新处理程序将其隐藏在客户端,因为更新处理程序将传递包含其修订版的现有文档(如果存在).

对于文档集合,在使用时_bulk_docs,您可以添加"new_edits": false哪些将强制插入冲突而不是拒绝(尽管您仍然需要传递_rev,它不一定是当前的).

总而言之,遵循规则会更好.获取要更新的文档的当前版本,尝试更新它,如果获得409,获取新版本,适当合并,然后再次更新.