CouchDB / PouchDB中的视图与过滤器

时间:2018-09-25 05:16:07

标签: couchdb pouchdb

我在CouchDB中有一个设计文档。我已经设置了视图和过滤器。

{
  "_id": "_design/my_index_id",
  "_rev": "17-fa5c543fcc80f4420aa98d58f7a07130",
  "views": {

    "jobsbyid": {
      "map": "function (doc,req) {if  (doc.type === 'job') {emit(doc.id);}}"
    }
  },
  "filters": {
    "myfilter": "function (doc, req) {return req.query.type === 'job'}"
}

视图和过滤器之间有何区别?在性能,用例和用法方面。何时使用视图以及何时使用过滤器?

1 个答案:

答案 0 :(得分:2)

在CouchDB中,复制过程具有不同的筛选选项。它们全部记录在这里CouchDB filtering options

关于过滤,您应该同时考虑到过滤是CouchDB中最昂贵的操作之一,只要数据库不断增长,它就可能使您陷入一些性能下降的问题。您可以查看此答案Filtered Sync between CouchDB and PouchDB

在性能方面,过滤器或视图的用法几乎相同,因为它们在每个过滤请求中过滤整个数据库。这在文档中说明

  

使用_view过滤器不会查询视图索引文件,因此您不能   使用常见的视图查询参数来额外过滤更改   按索引键进给。另外,CouchDB不会立即返回结果   就像对视图所做的一样-实际上,它使用指定的map函数作为   过滤器。

     

此外,您无法将此类过滤器设为动态,例如处理   请求查询参数或处理用户上下文对象-地图   该功能仅适用于文档。

使用视图进行过滤的优点是您正在重用地图函数进行过滤。

因此,这两种方法的用例非常相似,只是过滤器可以访问查询参数或安全上下文。