【问题标题】:Views vs Filters in CouchDB / PouchDBCouchDB / PouchDB 中的视图与过滤器
【发布时间】:2018-09-25 05:16:06
【问题描述】:

我在 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'}"
}

视图和过滤器有什么不同。在性能、用例和使用方面。何时使用视图以及何时使用过滤器?

【问题讨论】:

    标签: couchdb pouchdb


    【解决方案1】:

    在 CouchDB 中,复制过程有不同的过滤选项。所有这些都记录在这里CouchDB filtering options

    关于过滤,您应该考虑到过滤是 CouchDB 中最昂贵的操作之一,随着数据库的增长,它可能会导致您遇到一些性能下降问题。你可以查看这个答案Filtered Sync between CouchDB and PouchDB

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

    使用 _view 过滤器不会查询视图索引文件,所以你不能 使用通用视图查询参数来额外过滤更改 通过索引键馈送。此外,CouchDB 不会立即返回结果 正如它对视图所做的那样 - 它确实使用指定的 map 函数作为 过滤器。

    此外,您不能使此类过滤器动态化,例如处理 请求查询参数或处理用户上下文对象 - 地图 函数只对文档进行操作。

    使用视图进行过滤的好处是您可以重用地图功能进行过滤。

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

    【讨论】:

    • 谢谢!这很有帮助。就我而言,我想根据某些逻辑获取文档(例如,让我们说获取那些具有字段年龄:30 的文档)。对于这种情况,CouchDB Selector 不能正常工作?我唯一的选择是使用过滤器并通过 req.query 传递 id 30?
    • 选择器在您的情况下有效。选择器由客户端提供,未在设计文档中定义,因此您可以在客户端中组合条件,然后将它们传递给 db 复制配置。
    猜你喜欢
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多