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

批量更新CouchDB数据库,而每个文档没有_rev值?,couchdb,Couchdb,据报道 要更新现有文档,还需要发出PUT请求。在这种情况下,JSON body必须包含一个_rev属性,它让CouchDB知道编辑基于哪个版本。如果当前存储在数据库中的文档版本不匹配,则返回409冲突错误 我的目标是执行批量文档更新: 我的工作流程如下: 我的数据在谷歌文档电子表格中 我将电子表格数据复制并粘贴到 我使用cURL(如上所示)添加/更新文档 问题是,我第一次添加新文档时,一切都很正常,但下次发布相同的文档时,每个文档都会出现以下错误: …{“id”:“28”,“错误”:“冲突”,“

据报道

要更新现有文档,还需要发出PUT请求。在这种情况下,JSON body必须包含一个_rev属性,它让CouchDB知道编辑基于哪个版本。如果当前存储在数据库中的文档版本不匹配,则返回409冲突错误

我的目标是执行批量文档更新:

我的工作流程如下:

  • 我的数据在谷歌文档电子表格中
  • 我将电子表格数据复制并粘贴到
  • 我使用cURL(如上所示)添加/更新文档
  • 问题是,我第一次添加新文档时,一切都很正常,但下次发布相同的文档时,每个文档都会出现以下错误:

    …{“id”:“28”,“错误”:“冲突”,“原因”:“文档更新冲突”。}


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

    根据设计,您不能盲目更新CouchDB文档,您只能尝试更新文档的特定版本

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

    对于文档集合,当使用
    \u bulk\u docs
    时,您可以添加
    “new\u edits”:false,这将强制插入冲突,而不是拒绝(尽管您仍然需要通过修订,但它不必是当前修订)


    尽管如此,还是遵守规则为好。获取您要更新的文档的当前版本,尝试更新它,如果您获得409,则获取新版本,根据需要合并,然后再次更新。

    更新处理程序似乎是更新数据的方法。它会更快,因为您不必下载每个文档,将其合并到客户端,然后再次上载。相反,更新处理程序可以为您合并1/3的网络活动@这不是普遍的。因为更新处理程序不支持批处理操作,所以每个更新/持久化都有一个请求。如果您需要同时执行其中2-4个以上的操作,请执行批处理操作,因为通常需要2-4个请求(取决于具体情况),例如更新10个文档。当然,如果您使用
    “new\u edits”:false,您可以在一个请求中批处理persist/replace,但请注意,
    new\u edits
    是错误的。缺点是它不能保存修订历史,我想知道这是否会干扰复制…@DominykasMostauskis啊,是的,很好。OP可能希望进行批量下载、计算新值和批量上载,这将减少总体事务。如果我没有弄错的话,在没有当前版本的情况下使用new\u edits:false将导致冲突,并且在自动冲突解决过程中选择哪个文档是由coach决定的。因此,在您亲自动手解决冲突之前,您将看到一些批量插入的文档,但不是全部,因为它们被冲突的rev.Upvote隐藏,因为您提到
    ,您仍然需要通过一个_rev
    ,这对我帮助很大!
    curl -X POST [domain]/[couch db name]/_bulk_docs -H "Content-type: application/json" -d @[some document].json