官方文档推荐的解决复制冲突的方法是:
_conflicts
字段(例如通过视图)当我想合并已删除的文档时,会出现此问题。它们不会显示在_conflicts
字段中,而是显示在_deleted_conflicts
中。如果我仅使用_conflicts
字段合并,并且在本地数据库中删除文档并在远程副本中进行编辑,则它将在复制时在本地复活。我的应用程序模型假设在合并时始终优先删除:删除的文档会被删除,无论它与哪些编辑冲突。
因此,乍一看,最简单的方法是检查_deleted_conflicts
是否为空,如果不为空,请删除文档,对吧?嗯......问题在于,这可能还包含通过解决步骤#4中的编辑冲突而引入的已删除修订,因此_deleted_conflicts
的含义在这种情况下是不明确的。
在CouchDB(如果有的话)中处理删除冲突的规范方法是什么,这些冲突不涉及将文档标记为已删除和在应用程序层过滤等重要内容?
答案 0 :(得分:5)
最佳解决方案是使用保留属性_deleted
删除文档而不是HTTP DELETE
。然后您也可以自由设置其他属性:
doc._deleted = true;
doc.deletedByUser = true;
doc.save();
然后在合并过程中检查_deleted_conflicts
的_changes供稿,如果_deleted_conflicts中有deletedByUser
标记设置为true
的修订,则删除该文档。
我希望这有帮助!