更改过滤器功能时,来自ouchbeddb的Pouchdb过滤的复制未过滤

时间:2018-11-30 12:42:30

标签: javascript ionic-framework couchdb listener pouchdb

我有带有pouchdb和couchdb的离子应用程序。我在ouchdb中写了过滤器文档,用于pouchdb中的同步文档。它将完美运行。如果更改了ouchdb中的过滤器功能,则过滤器将无法正常工作。

我的beddb有以下文件

员工

{
  "_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)

它工作正常并且仅同步员工文档。

如果我在如下所述的沙发床中更改过滤器文档(设计文档)

{
  "_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;  } } "
  }
}

在这里,我还添加了部门对象。进行此更改后,员工仅同步,而不同步部门文档。如何获得部门文件?如果我在ouchdb中修改部门文档,则它将同步。

1 个答案:

答案 0 :(得分:0)

复制过程按更改发生的顺序处理文档。

复制如何工作?

因此,如果您处于序列1001并更新了过滤器复制,则序列1001之后的更改将使用更新的过滤器功能进行处理。

从开始复制

如果要从第一个序列开始复制,则需要取消复制并使用更新的过滤器功能重新开始。

  

注意:从目标数据库中筛选出已从中复制的文档。他们已经通过了一次过滤器!

新鲜复制

如果您希望复制的输出完全反映您的过滤器功能,则需要复制到新数据库。