2015-06-29 2 views
1

Я создаю мобильное приложение, используя Ionic Framework. Приложение представляет собой простой корпоративный «каталог сотрудников» с использованием PouchDB для хранения и синхронизации с моей базой данных.PouchDB Односторонняя репликация, сохранение локально добавленных свойств

Мое приложение имеет функцию pull-to-refresh, которая запускает одностороннюю репликацию с CouchDB на PouchDB в приложении. Это работает отлично, но у меня есть один маленький snafu ...

Приложение имеет функцию «список друзей», в которой пользователь может вывести сотрудника из списка, чтобы добавить их в меню быстрого контакта. Когда они прокручивают сотрудника, приложение добавляет свойство favorite: true к документу PouchDB. Это отлично работает до тех пор, пока этот конкретный документ не будет реплицирован. Как и следовало ожидать, добавленное свойство favorite: true стирается, поскольку оно не синхронизируется с CouchDB (я хочу, чтобы это свойство было локальным).

Мой вопрос: Есть ли способ иметь один способ репликации, но сохранить часть документа? Мне бы очень хотелось, чтобы база данных CouchDB реплицировала весь документ, но оставила свойство favorite нетронутым.

Я попытался использовать решение с localStorage и сравнить сохраненный массив с идентификаторами документа, но он довольно грязный и не очень эффективный.

Заинтересованы в том, чтобы услышать, что другие могли сделать для решения подобных ситуаций. Спасибо заранее!

Вот некоторые примеры того, что данные мой PouchDB выглядит следующим образом:

0: { 
    doc: { 
     first_name: 'John', 
     last_name: 'Smith', 
     phone: 'xxxxxxx', 
     email: '[email protected]' 
    }, 
    id: '12314131231', 
    key: '12314131231' 
}, 

1: { 
    doc: { 
     first_name: 'Jane', 
     last_name: 'Doe', 
     phone: 'xxxxxxx', 
     email: '[email protected]', 
     favorite: true <!-- Added by app, overwritten when replication occurs --> 
    }, 
    id: '1231344431', 
    key: '1231344431' 
} 
+0

Как вы копируете данные с дивана в сумку? Вы используете PouchDB.replicate (источник, цель, [параметры]) или с помощью любого плагина пакета. –

+0

@BhaveshJariwala Я использую 'localDB.replicate.from (remoteDB)', а затем выполняю $ scope. $ Apply (обновление содержимого), когда репликация завершена. – Justin

+0

Проверяете ли вы, что после внесения изменений в документ-пак, репликация с кушетки на сумку работает? –

ответ

2

Вы сохраняете каждую деталь пользователя в качестве отдельного документа. Репликация выполняется по основному документу _rev (ревизия).

Вы используете одностороннюю репликацию с дивана в сумку. Поэтому каждый раз, когда вы копируете все документы, они будут восстановлены, так как они находятся на диване.

только документы, которые находятся на диване, будут реплицированы только в сумку. если у вас есть дополнительные документы в пакете, то репликация не повлияет на дополнительные дополнительные документы.

так что вы можете сделать, это сделать один документ, содержимое которого является идентификатором пользователя, который вы отмечаете как друга.

поэтому, когда вы загружаете друга, вам нужно проверить идентификатор друга в этом документе (отдельный документ для поддержания идентификатора друзей).

Этот подход может решить вашу проблему. используя это, каждый пользователь имеет собственный список друзей в отдельном документе.

документ может выглядеть

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

так что этот документ будет там в pouch.Replication не влияет на это.

Удачи

Смежные вопросы