解决CouchDB中已删除文档的复制冲突

Ale*_*x B 12 database couchdb

解决官方文档建议的复制冲突的方法是:

  1. 使用文档的_conflicts字段读取冲突的修订(例如,通过视图)
  2. 获取列出的所有修订的文档
  3. 执行特定于应用程序的合并
  4. 删除不需要的修订

当我想合并已删除的文档时,问题就出现了.它们不会出现在_conflicts现场,而是出现在_deleted_conflicts.如果我仅使用_conflicts字段合并,并且在本地数据库中删除文档并在远程副本中进行编辑,则它将在复制时在本地复活.我的应用程序模型假设在合并时始终优先删除:删除的文档会被删除,无论它与哪些编辑冲突.

所以,乍一看,最简单的方法是检查它_deleted_conflicts是否为空,如果它不是空的,删除文件,对吗?嗯......问题在于,这可能还包含通过解决步骤#4中的编辑冲突而引入的已删除的修订,因此_deleted_conflicts在这种情况下含义不明确.

在CouchDB(如果有的话)中处理删除冲突的规范方法是什么,这些冲突不涉及将文档标记为已删除和在应用程序层过滤等重要内容?

Ber*_*ner 5

最好的解决方案是使用保留属性_deleted来删除文档而不是HTTP DELETE.然后您可以自由设置其他属性:

doc._deleted = true;
doc.deletedByUser = true;
doc.save();
Run Code Online (Sandbox Code Playgroud)

然后在合并过程中检查_changes feed for _deleted_conflicts并删除文档,如果_deleted_conflicts中有一个deletedByUser标记设置为的修订版true.

我希望这有帮助!