Односторонняя репликация PouchDB, сохранение локально добавленных свойств

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

В моем приложении есть функция обновления по запросу, которая запускает одностороннюю репликацию из CouchDB в PouchDB в приложении. Это работает отлично, но у меня есть одна маленькая загвоздка...

В приложении есть функция «список друзей», где пользователь может провести сотрудника из списка, чтобы добавить его в меню быстрого доступа. Когда они проводят пальцем по сотруднику, приложение добавляет свойство 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'
}

person Justin    schedule 29.06.2015    source источник
comment
Как вы копируете данные с дивана в сумку? Используете ли вы PouchDB.replicate(источник, цель, [параметры]) или используете какой-либо плагин для пакетов?   -  person Bhavesh Jariwala    schedule 08.07.2015
comment
@BhaveshJariwala Я использую localDB.replicate.from(remoteDB), а затем выполняю $scope.$apply (обновление содержимого), когда репликация завершена.   -  person Justin    schedule 08.07.2015
comment
Проверяли ли вы, что после внесения изменений в пакетную документацию репликация с дивана на сумку работает?   -  person Bhavesh Jariwala    schedule 09.07.2015
comment
Вы храните информацию о каждом друге в одном документе или в CouchDB есть отдельный документ для каждого друга?   -  person Bhavesh Jariwala    schedule 09.07.2015
comment
@BhaveshJariwala Я могу подтвердить, что репликация работает. Поскольку это приложение представляет собой одностороннюю репликацию (из CouchDB в PouchDB), когда я добавляю свойство favorite, это свойство НЕ синхронизируется обратно в CouchDB — это предназначено, иначе у всех будут одни и те же друзья. Когда репликация вызывается, она перезаписывает сохраненные данные PouchDB, включая свойство favorite, которое было добавлено к контактам, выбранным пользователем. Я ищу альтернативное решение этой проблемы, чтобы сохранить свойства favorite и не перезаписывать их. Я добавлю пример данных выше.   -  person Justin    schedule 09.07.2015


Ответы (1)


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

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

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

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

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

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

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

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

так что этот документ будет в сумке. Репликация на это не влияет.

Удачи

person Bhavesh Jariwala    schedule 10.07.2015