PouchDB单向复制,保留本地添加的属性

时间:2015-06-29 17:30:23

标签: couchdb ionic pouchdb

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

我的应用程序具有一个pull-to-refresh功能,可以在应用程序上启动从CouchDB到PouchDB的单向复制。这很完美,但我有一点点麻烦......

该应用具有“朋友列表”功能,用户可以从列表中滑动员工,将其添加到快速联系人菜单中。当他们刷一名员工时,该应用程序会向PouchDB文档添加favorite: true属性。在复制特定文档之前,此功能很好。正如人们所预料的那样,添加的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'
}

1 个答案:

答案 0 :(得分:3)

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

你正在使用从沙发到小袋的单向复制。因此,每次复制时,所有文档都将在沙发中恢复。

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

所以你可以做的是制作一个你标记为朋友的用户内容id的文件。

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

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

文件可能看起来像

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

所以这个文件将放在邮袋中。复制不会影响它。

祝你好运