在Couchbase Lite中清除文档

3
我有一个使用Couchbase Lite的移动应用程序。当用户退出登录时,我想删除设备上的一些文档;即用户特定的文档。我不想删除所有文档。文档有一个purgeDocument()方法,我认为可以在这些用户特定文档上调用它。
问题在于,如果用户重新登录并运行拉取复制,那么清除的文档不会重新同步到设备上。
根据我对CouchDB同步协议的了解,这些文档不会重新同步,因为这些用户特定文档上没有更新序列以触发重新同步。
我该如何解决这个问题?
可能的方案:
  1. 删除整个数据库(包括公共文档),性能会受到影响。
  2. 某种方式重置复制器的最后一个序列,并希望复制器不会通过网络传输已经下载的文档。(可能会破坏CBL)
  3. 有单独的数据库,一个存储用户特定的文档,另一个包含公共文档。数据库可以通过渠道进行过滤复制器,因此将输入数据分区为单独的数据库是可行的。问题是在使用CBLModel对象包装器加载不同数据库文档之间的无缝引用时。

我认为你应该选择第三个。 - pushpendra chauhan
如果我不得不管理另一个数据库,我不知道会遇到多少额外的负担或不必要的复杂性。 - Joel Jeske
4个回答

0

官方文档的“清除文档”子部分中我了解到,如果服务器端的文档未被修改/更新(简言之,其版本与原版本相同),则您不需要再次检索该文档。

当用户再次登录您的应用程序时,您可以尝试使用相同类型和用户名(或您用于识别用户配置的任何内容)创建一个虚拟文档,以便触发来自服务器的拉取复制。您可能会遇到冲突,但可以轻松从服务器获取修订信息解决问题。

希望这个想法能有所帮助。

评论后更新

想法是在某个地方存储您要清除的用户文档的idtype。这样,当用户再次登录时,您可以创建具有这两个字段的新虚拟文档。也许这个新的虚拟文档会触发拉取复制。

注意:我没有尝试过这种方法。我只是猜测这可能是您问题的解决方法。


那么您的建议是,在登录时,我创建一个重复的用户记录,我知道它存在于服务器上但在设备上缺失,然后服务器将发送正确的文档?我不明白为什么服务器会推送冲突的修订版本。 - Joel Jeske

0

当用户登录时,您可以继续清除文档。

为了解决特定文档重新同步的问题,我认为最简单的方法是使用过滤复制,其中过滤器是文档ID。

这些文档ID可以以可派生的方式创建。例如,它可以是UserDocument ::。

现在,当用户登录时,您可以启动一个一次性复制,文档ID作为过滤器。这只能在一次操作中完成。当此一次性操作完成后,您可以通过更改复制的设置(更改过滤器/通道)再次开始复制。

以下是Couchbase提供的URL,其中解释了按文档ID进行过滤的复制。

https://developer.couchbase.com/documentation/mobile/1.4/guides/couchbase-lite/native-api/replication/index.html#filtering-by-document-ids


0
我建议你的后端在用户登录时修改所选文件 - 这只需要更新时间戳 - 这将会将新版本发布到设备。

0

在使用Couchbase Lite清除文档后,请尝试使用Push,这样您可以稍后从服务器中拉取该文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接