Couchdb 在Couchbase Lite中清除文档

Couchdb 在Couchbase Lite中清除文档,couchdb,couchbase,couchbase-lite,couchbase-sync-gateway,Couchdb,Couchbase,Couchbase Lite,Couchbase Sync Gateway,我有一个使用Couchbase lite的移动应用程序。当用户注销时,我想删除设备上的部分文档;用户特定的文档。我不想删除所有文档。文档有一个purgeDocument()方法,我想我可以调用这些特定于用户的文档 问题是,如果用户重新登录并运行拉复制,则清除的文档不会重新同步到设备 根据我对CouchDB同步协议所知的一点,不重新同步这些文件是有道理的,因为在这些用户特定的文档上没有更新的序列来触发重新同步 我应该如何处理这个问题 可能性 删除整个数据库(包括常用文档)并失去性能 以某种方式重置

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

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

根据我对CouchDB同步协议所知的一点,不重新同步这些文件是有道理的,因为在这些用户特定的文档上没有更新的序列来触发重新同步

我应该如何处理这个问题

可能性
  • 删除整个数据库(包括常用文档)并失去性能
  • 以某种方式重置复制器的最后一个序列,希望复制器不会通过网络传输已经下载的文档。(可能会搞砸CBL)
  • 有单独的数据库,一个存储用户特定的文档,另一个包含普通文档。数据库可以有经过筛选的复制器(按通道),因此将传入数据划分到单独的数据库是可行的。问题在于使用CBLModel对象包装器时,不同数据库的文档之间的无缝引用加载 正如我从清除文档小节中了解到的,您不会再次检索文档,因为它没有在服务器端进行修改/更新(简而言之,其版本相同)

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

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

    评论后更新

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


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

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

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

    要解决重新同步特定文档的问题,我认为最简单的方法是使用筛选复制,其中筛选是文档id

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

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

    下面是Couchbase提供的URL,它解释了按文档ID筛选的复制


    我认为您应该选择第三个。我不知道如果我必须管理另一个数据库,会遇到多少开销或不必要的复杂性。因此,您建议在登录时,我创建一个重复的用户记录,我知道该记录存在于服务器上,但在设备上丢失,然后服务器会发送正确的文档?我不明白为什么服务器会推下冲突的版本。