官方文档推荐的解决复制冲突的方式是:
- 使用文档阅读冲突的修订版本
_conflicts
字段(例如通过视图)
- 获取列出的所有修订的文档
- 执行特定于应用程序的合并
- 删除不需要的修订
当我想合并的时候问题就来了deleted文件。他们没有出现在_conflicts
领域,但在_deleted_conflicts
。如果我仅使用合并_conflicts
字段,并且在本地数据库中删除文档并在远程副本中编辑文档,该文档将在复制时在本地复活。我的应用程序模型假设合并时删除始终优先:已删除的文档无论与哪些编辑发生冲突,都将保持删除状态。
因此,乍一看,最简单的事情就是检查_deleted_conflicts
不为空,如果不为空,就删除该文档,对吧?嗯...问题在于,这也可能包含通过解决步骤 #4 中的编辑冲突而引入的已删除修订,因此含义_deleted_conflicts
在这种情况下是不明确的。
在 CouchDB 中处理删除冲突(如果有)的规范方法是什么,不涉及将文档标记为已删除和在应用程序层进行过滤等粗暴的事情?
最好的解决方案是使用保留的属性_deleted
删除文档而不是HTTP DELETE
。然后您还可以自由设置其他属性:
doc._deleted = true;
doc.deletedByUser = true;
doc.save();
然后在合并过程中检查 _changes feed 的情况_deleted_conflicts
如果 _deleted_conflicts 中存在具有以下内容的修订,则删除该文档deletedByUser
标志设置为true
.
我希望这有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)