Pouchdb фильтрует репликацию из couchdb, не фильтруя при изменении функции фильтра - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть ионное приложение с pouchdb и couchdb.У меня есть фильтр записи документа в couchdb для синхронизации документов в pouchdb.Это будет работать отлично.Если я изменю функции фильтра в couchdb, тогда фильтр не будет работать должным образом.

Мои документы имеют следующие документы

Сотрудник

{
  "_id": "employee_2_073489FC-786E-4843-BD3F-B7E191BB532D",
  "_rev": "1-f9f43e1416744675ac14c9f3f7323598",
  "data": {
    "name": "prabu1",
    "empid": "2",
    "type": "employee"
  }
}

Отдел

{
  "_id": "department_2_DD6D808A-57A8-22A4-A5FF-A610F50AC678",
  "_rev": "2-99fde11786d64ef9928ddca590998588",
  "data": {
    "name": "ios",
    "deptid": "1",
    "type": "department"
  }
}

Это мой фильтрующий документ в кушетке (Проектный документ)

{
  "_id": "_design/live_filter",
  "_rev": "6-d02296cc19f98676cb674339e8563d69",
  "language": "javascript",
  "filters": {
    "live_filter": "function(doc) { if (doc._id === '_design/live_filter') {  return true;  } else if (doc.data) {  if (doc['data'].type === 'employee') {  return true;  } else {   return false;  }  } else {  return false;  } } "
  }
}

Код синхронизации в ионном приложении

var opt = {
                live: true,
                retry: true,
                filter: "live_filter",
                include_docs: true
            }
this.db.sync(remoteurl, opt)

Работает нормально и синхронизируетсяТолько документ сотрудника.

Если я изменю свой фильтрующий документ в couchdb, как показано ниже (Проектный документ)

{
  "_id": "_design/live_filter",
  "_rev": "6-d02296cc19f98676cb674339e8563d69",
  "language": "javascript",
  "filters": {
    "live_filter": "function(doc) { if (doc._id === '_design/live_filter') {  return true;  } else if (doc.data) {  if (doc['data'].type === 'employee' || doc['data'].type === 'department') {  return true;  } else {   return false;  }  } else {  return false;  } } "
  }
}

Здесь я добавил объект отдела дополнительно.После этого изменения сотрудник только синхронизировать, а не отдел документации синхронизации.Как получить документы отдела?Если я изменю doc отдела в couchdb, то он будет синхронизирован.

1 Ответ

0 голосов
/ 03 декабря 2018

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

Как работает репликация?

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

Реплицирование с начала

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

Примечание : документ, который уже был реплицирован, отфильтрован из целевой базы данных.Они уже прошли фильтр один раз!

Свежая репликация

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

...