首页 > 解决方案 > 如何在远程数据库中清除文档后重新复制文档

问题描述

我有一个应用程序,其中远程数据库中可用的文档是服务器上可用文档的子集。当用户所需的子集发生更改时,远程数据库中不再需要的文档将被清除(是的,清除,未删除)并复制新文档。如果将用户所需的子集更改为包含先前已清除的文档,则我无法找到使清除的文档再次复制以在客户端上恢复它们​​的方法。

要考虑的一个简单场景是:

  1. 创建两个数据库,A和B
  2. 在 A 中创建文档“D”
  3. 将数据库 A 复制到 B
  4. 在 B 中,吹扫 D
  5. 再次将 A 复制到 B 并注意 D 没有被复制

我试过压缩B,但无济于事。我可以理解,通过持续复制,D不会再被发送,因为它没有改变。但是我也无法使用一次性复制来重新复制 D。一旦 CouchDB 处于这种状态,如何将复制副本 D 从 A 复制到 B?

我正在使用 CouchDB 2.3。

标签: couchdb

解决方案


当复制完成时,CouchDB 在每个节点上存储一个本地复制日志。

它可能正在获取此日志,并从中断处继续,从而忽略上次复制之前发生的更改(例如创建现在已清除的文档)。

我可以想到两种解决方案:

  1. _local/通过查找文档并删除它们来手动删除这些复制日志。

  2. 更改,甚至是轻微的复制参数,以便 CouchDB 生成一个新的复制 ID以进行日志记录。一种方法是添加一个过滤器函数(它可以是一个不过滤任何内容的过滤器函数)。


推荐阅读