3

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

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

根据我对 CouchDB 同步协议的了解,它们没有重新同步是有道理的,因为这些用户特定文档上没有更新的序列更新来触发重新同步。

我应该如何解决这个问题?

可能性

  1. 删除整个数据库(包括公共文档)并失去性能。
  2. 不知何故重置了复制器的最后一个序列,并希望复制器不会通过网络传输已经下载的文档。(可能会搞砸CBL)
  3. 拥有单独的数据库,一个存储用户特定的文档,一个包含通用文档。数据库可以具有过滤的复制器(按通道),因此将传入数据分区到单独的数据库中是可行的。当使用 CBLModel 对象包装器时,问题将是不同数据库的文档之间的无缝引用加载。
4

4 回答 4

0

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

于 2021-07-13T19:36:50.903 回答
0

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

于 2017-01-26T20:46:29.330 回答
0

正如我从清除文档小节中的官方文档中了解到的那样,您不会因为它在服务器端没有被修改/更新(简而言之,它的版本是相同的)而再次检索该文档。

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

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

评论后更新

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

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

于 2015-12-22T12:43:27.593 回答
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

于 2018-06-04T13:59:29.890 回答