2011-04-07 67 views
9

是否有可能访问视图中的请求查询字符串参数?CouchDB - 在视图中访问查询字符串参数

考虑这一请求...... GET/database/_designs/foo/?bar=1

而这个地图...

views { 
    foo: { 
     map: function (document) 
     { 
      // I want to access querystring parameter "bar" here! But how? 


      // I'd like to be able to do something along the lines of... 

      if (bar > 0) emit(null, document); 
     } 
    } 
} 

回答

14

http://sitr.us/2009/06/30/database-queries-the-couchdb-way.html

CouchDB的设计让你在大型数据集大 性能。但它 意味着当您运行查询时,您不能将动态 参数传递到您的地图功能。您不能要求它 仅发出带有给定 姓氏的用户记录,除非您想要为该特定 姓氏保留 特殊视图。在大多数情况下, 实际上并不适用于针对 构建单独的视图,您可能希望某一天运行 。因此,您可以执行的操作是针对上述通用 视图运行 查询,并仅请求与特定键匹配的键/值 对。

function find_users_by_last_name(db, last_name) { 
    var matches; 
    matches = db.view('users/last_names', { key: last_name }); 
    return matches.rows.map(dot('value')); 
} 

因此,没有,但可以查询对视图。

+0

只有在查看视图时才允许传输一个参数(“key”)。我对吗?或者你可以传递自定义密钥? – roosteronacid 2011-04-11 13:46:28

+0

有关[CouchDb:权威指南](http://guide.couchdb.org/editions/1/en/cookbook.html#key)的工作方式的更深入的解释。它也有使用查询字符串的非couch.js示例。 CouchDb wiki有一个完整的查询参数列表:http://wiki.apache.org/couchdb/HTTP_view_API?action=show&redirect=HttpViewApi#Querying_Options – Tayler 2013-07-12 05:02:16

4

该视图是预先计算的,因此不能计算参数。然后,您可以用来查询视图的唯一参数是一个键或一个范围来检索它的一个子集。所以你可以做的是使用list function做更多的事情来看待。很难说不知道你想达到什么。如果你想在CouchDB中真正动态查询,你可以使用临时视图,但是它可能会很慢,因为数据库中的所有文档都会被传递给它。