2011-04-07 84 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中真正動態查詢,你可以使用臨時視圖,但是它可能會很慢,因爲數據庫中的所有文檔都會被傳遞給它。