CouchDB Ektorp-x27中的批量更新;不能返回更新冲突吗?

CouchDB Ektorp-x27中的批量更新;不能返回更新冲突吗?,couchdb,ektorp,Couchdb,Ektorp,我一直在使用Ektorp(1.3.0)框架连接我的CouchDB数据库。 但是,当存在更新冲突时会出现问题。 我正在使用方法executeAllOrNothing进行批量更新。如文件所述,此方法(以及HTTP API等效的\u bulk\u docs?all\u或\u nothing):true不检查冲突。从: 但是,如果id为0的文档存在冲突,则两个版本都将冲突 出现在数据库中,可任意选择 显示在视图中。您可以使用GET with检查此状态 冲突=真实 此外: 依赖此功能的应用程序应该能够 容

我一直在使用Ektorp(1.3.0)框架连接我的CouchDB数据库。 但是,当存在更新冲突时会出现问题。 我正在使用方法
executeAllOrNothing
进行批量更新。如文件所述,此方法(以及HTTP API等效的
\u bulk\u docs?all\u或\u nothing):true
不检查冲突。从:

但是,如果id为0的文档存在冲突,则两个版本都将冲突 出现在数据库中,可任意选择 显示在视图中。您可以使用GET with检查此状态 冲突=真实

此外:

依赖此功能的应用程序应该能够 容忍某些文档丢失或处于冲突状态,直到 冲突解决可能发生

然而,Ektorp针对该方法的javadocs表示:

列表(返回的)将只包含从CouchDB返回的任何类型错误代码的文档条目。即,如果所有操作都成功完成,列表将为空

我发现情况并非如此。当发生冲突时,Ektorp仍然返回空列表。我发现获取失败操作列表的唯一方法是使用
executeBulk
而不是
executeAllOrNothing
,但这并不令人满意,因为我需要将其作为事务


是否有任何方法可以让我知道调用
executeAllOrNothing
是否成功,如果没有成功,哪些文档存在冲突问题(无需重复对每个文档使用
get with conflicts=true
,因为我可能会一次保存数千个文档,因此这是不切实际的)?

您提到的ektorp文档中描述的行为不是CouchDB行为。使用
all\u或\u nothing:true
CouchDB只返回数组中的成功对象(
ok
id
和new
rev
),而没有任何冲突指示


因此,这种行为(从该数组中删除成功的对象)是ektorp必须(有意)做到的确实如此。这听起来像ektorp中的一个bug。你应该看看如何报告bug。

我同意,这是ektorp中的一个bug,尽管CouchDB的行为很奇怪,当冲突发生时,显式地让视图任意选择获胜的版本。但我理解这是复制模型的一个限制。你看复制,我看predictable自动冲突解决:)