我一直在使用 Ektorp (1.3.0) 框架连接到我的 CouchDB 数据库。但是,当存在更新冲突时会出现问题。我正在使用 executeAllOrNothing
批量更新的方法。如文档所述,此方法(以及等效的 HTTP API _bulk_docs?all_or_nothing":true
不会对冲突进行任何检查。来自HTTP API 文档:
但是,如果 id 为 0 的文档发生冲突,则两个版本都将出现在数据库中,并且可以任意选择哪个版本出现在视图中。您可以使用带有 ?conflicts=true 的 GET 检查此状态
还:
依赖此功能的应用程序应该能够容忍某些文档丢失或处于冲突状态,直到发生冲突解决。
但是,该方法的 Ektorp 的 javadocs 说:
该列表(返回)将仅包含具有从 CouchDB 返回的任何类型的错误代码的文档的条目。即如果一切都成功完成,列表将为空。
我发现事实并非如此。当发生冲突时,Ektorp 仍然返回一个空列表。我发现获取失败操作列表的唯一方法是使用executeBulk
而不是executeAllOrNothing
,但这并不令人满意,因为我需要这是一个事务。
有什么方法可以知道调用是否executeAllOrNothing
成功,如果没有成功,哪些文档有冲突问题(无需重复使用GET with conflicts=true
每个文档,因为我可能会尝试一次保存数千个文档,所以这个不切实际)?