我在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'}"
}
视图和过滤器之间有何区别?在性能,用例和用法方面。何时使用视图以及何时使用过滤器?
答案 0 :(得分:2)
在CouchDB中,复制过程具有不同的筛选选项。它们全部记录在这里CouchDB filtering options
关于过滤,您应该同时考虑到过滤是CouchDB中最昂贵的操作之一,只要数据库不断增长,它就可能使您陷入一些性能下降的问题。您可以查看此答案Filtered Sync between CouchDB and PouchDB
在性能方面,过滤器或视图的用法几乎相同,因为它们在每个过滤请求中过滤整个数据库。这在文档中说明
使用_view过滤器不会查询视图索引文件,因此您不能 使用常见的视图查询参数来额外过滤更改 按索引键进给。另外,CouchDB不会立即返回结果 就像对视图所做的一样-实际上,它使用指定的map函数作为 过滤器。
此外,您无法将此类过滤器设为动态,例如处理 请求查询参数或处理用户上下文对象-地图 该功能仅适用于文档。
使用视图进行过滤的优点是您正在重用地图函数进行过滤。
因此,这两种方法的用例非常相似,只是过滤器可以访问查询参数或安全上下文。