gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:42:55 26 4
gpt4 key购买 nike

官方文档推荐的解决复制冲突的方法是:

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

当我想合并已删除 文档时,问题就来了。它们不会出现在 _conflicts 字段中,而是出现在 _deleted_conflicts 中。如果我仅使用 _conflicts 字段进行合并,并且在本地数据库中删除了一个文档并在远程副本中对其进行了编辑,那么它将在复制时在本地恢复。我的应用程序模型假定在合并时删除始终优先:已删除的文档将保持删除状态,无论它与什么编辑发生冲突。

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

在 CouchDB 中处理删除冲突(如果有的话)的规范方法是什么,而不涉及在应用程序层做一些粗暴的事情,例如将文档标记为已删除和过滤?

最佳答案

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

doc._deleted = true;
doc.deletedByUser = true;
doc.save();

然后在合并过程中,检查 _deleted_conflicts 的 _changes 提要,如果 _deleted_conflicts 中有一个修订将 deletedByUser 标志设置为 true,则删除文档

希望对您有所帮助!

关于database - 解决 CouchDB 中已删除文档的复制冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13043927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com