在Couchbase Lite中清除文档

时间:2015-12-21 22:08:30

标签: couchdb couchbase couchbase-lite couchbase-sync-gateway

我有一个使用Couchbase lite的移动应用程序。当用户注销时,我想删除设备上的部分文件;用户特定的文档。我不想删除所有文件。文档有一个purgeDocument()方法,我认为我可以调用这些用户特定的文档。

问题是,如果用户重新登录并执行拉动复制,则清除的文档不会重新同步到设备。

基于我对CouchDB同步协议的了解很少,因为没有对这些用户特定文档进行更新的序列更新以触发重新同步,所以不会重新同步这些协议。

我该如何处理这个问题?

可能性

  1. 删除整个数据库(包括常用文档)并失去性能。
  2. 以某种方式重置复制器的最后一个序列,并希望复制器不通过线路传输已经下载的文档。 (可能会搞砸CBL)
  3. 拥有单独的数据库,一个存储用户特定的文档,另一个包含常用文档。数据库可以具有过滤的复制器(按通道),因此将传入的数据分区为单独的数据库是可行的。问题在于使用CBLModel对象包装器时不同数据库的文档之间的无缝引用加载。

4 个答案:

答案 0 :(得分:0)

正如我从清除文档小节中的official documentation所理解的那样,你不是因为它没有被修改/更新而再次检索文档(简而言之,它的版本是在服务器端。

当用户再次登录您的应用程序时,您可以尝试再次创建具有相同类型的虚拟文档,例如用户名(或用于识别用户配置的任何内容),以便从中触发拉动复制服务器。您可能会遇到可以通过服务器修改轻松解决的冲突。

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

评论后更新

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

注意:我没有尝试过这种方法。我只想猜测你的问题可能是什么。

答案 1 :(得分:0)

我建议您的后端修改所选文档 - 这可能只是一个时间戳更新 - 用户登录后,会将新版本发布到设备

答案 2 :(得分:0)

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

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

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

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

以下是Couchbase的URL,它解释了按文档ID过滤的复制。

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

答案 3 :(得分:0)

在使用 Couchbase Lite 清除文档后尝试推送,它允许您稍后从服务器拉取文档。