【问题标题】:PouchDB One Way Replication, Preserve Locally Added PropertiesPouchDB 单向复制,保留本地添加的属性
【发布时间】:2015-09-16 06:51:47
【问题描述】:

我正在使用Ionic Framework 构建一个移动应用程序。该应用程序是一个简单的企业“员工目录”,使用 PouchDB 存储并与我的数据库同步。

我的应用程序具有下拉刷新功能,该功能可以在应用程序上启动从 CouchDB 到 PouchDB 的单向复制。这很好用,但我有一个小问题......

该应用程序具有“朋友列表”功能,用户可以在其中从列表中滑动员工以将其添加到快速联系人菜单中。当他们刷员工时,应用程序将favorite: true 属性添加到 PouchDB 文档中。在复制该特定文档之前,此功能非常有用。正如人们所期望的那样,添加的favorite: true 属性被删除,因为它没有与 CouchDB 同步(我想将此属性保留在本地)。

我的问题:有没有办法进行单向复制,但保留部分文档?我希望 CouchDB 数据库复制整个文档,但保持 favorite 属性不变。

我尝试使用带有 localStorage 的解决方案并将存储的数组与文档 ID 进行比较,但它非常混乱且性能不高。

有兴趣了解其他人可能为解决类似情况所做的工作。 提前致谢!

以下是我的 PouchDB 的一些示例数据:

0: {
    doc: {
      first_name: 'John',
      last_name: 'Smith',
      phone: 'xxxxxxx',
      email: 'john@example.com'
    },
    id: '12314131231',
    key: '12314131231'
},

1: {
    doc: {
      first_name: 'Jane',
      last_name: 'Doe',
      phone: 'xxxxxxx',
      email: 'jane@example.com',
      favorite: true <!-- Added by app, overwritten when replication occurs -->
    },
    id: '1231344431',
    key: '1231344431'
}

【问题讨论】:

  • 您如何将数据从沙发复制到小袋?你是在使用 PouchDB.replicate(source, target, [options]) 还是使用任何 pouch 插件
  • @BhaveshJariwala 我正在使用localDB.replicate.from(remoteDB),然后在复制完成后执行 $scope.$apply(内容刷新)。
  • 您是否检查过在对 pouch doc 进行更改后,从 couch 到 pouch 的复制是否有效?
  • 您是将每个朋友的详细信息存储在单个文档中还是在 couchdb 中为每个朋友存储单独的文档?
  • @BhaveshJariwala 我可以确认复制工作正常。因为当我添加favorite 属性时,此应用程序是单向复制(从 CouchDB 到 PouchDB),所以该属性不会同步回 CouchDB - 这是有意的,否则每个人都会有相同的朋友。当调用复制时 - 它会覆盖存储的 PouchDB 数据,包括添加到用户选择的联系人的 favorite 属性。我正在寻找此问题的替代解决方案,以便我可以保留 favorite 属性并且不会覆盖它们。我将在上面添加示例数据。

标签: couchdb ionic pouchdb


【解决方案1】:

您将每个用户详细信息存储为单独的文档。复制是在文档_rev(修订)的基础上完成的。

您正在使用一种从沙发到小袋的复制方式。因此,每次复制时,所有文档都将恢复原样。

只有沙发上的文件才会被复制到袋子里。如果您在邮袋中有任何额外的文件,则复制不会影响任何额外的额外文件。

所以你可以做的是制作一份文档,其中包含你标记为朋友的用户的内容 id。

因此,当您加载好友时,您只需检查该文档中的好友 ID(单独的文档以维护好友 ID)。

这种方法可以解决您的问题。使用这个每个用户在单独的文档中都有自己的朋友列表。

文件可能看起来像

{
    "_id": "Friendlist",
    "friendlist": [12314131231, 1231344431]
}

所以这个文件会在袋子里。复制不会影响它。

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2011-08-16
    • 2018-05-29
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多