批量更新CouchDB数据库,而每个文档没有_rev值?
据报道 要更新现有文档,还需要发出PUT请求。在这种情况下,JSON body必须包含一个_rev属性,它让CouchDB知道编辑基于哪个版本。如果当前存储在数据库中的文档版本不匹配,则返回409冲突错误 我的目标是执行批量文档更新: 我的工作流程如下:批量更新CouchDB数据库,而每个文档没有_rev值?,couchdb,Couchdb,据报道 要更新现有文档,还需要发出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