2017-06-14 37 views
0

我使用ektrop查詢視圖,像這樣:CouchDB的觀點:匹配所有鑰匙只有

query = new ViewQuery().designDocId("_design/accounts").viewName("by_account").key(search).startKey(0).endKey(99); 

這將返回匹配的關鍵search或那些開始和結束鍵之間哪些文件。我試圖在文檔中查看與search和開始/結束鍵都匹配的文檔。我如何獲得這個?

我的視圖形成這樣的:

"by_account": { 
      "map": "function(doc) { 
        emit(doc.loginString,doc); 
        emit(doc.enrolmentPercentage, doc); }" 
     } 

回答

2
  1. 避免排放該文檔作爲映射中的值/減少。它將成爲索引的一部分,因此索引將變得越來越大。取而代之的是不發出任何值,並使用「include_docs」查詢參數來獲取文檔。
  2. 不能使用的關鍵參數還有startkey和endkey(它是相互矛盾的)

對於這種類型的查詢,你主要是3解決方法:

  1. 使用芒果查詢和$或操作符(您希望密鑰匹配「搜索」或介於0和99之間)
  2. 進行兩個查詢(一個查找關鍵字「search」,另一個查找「startkey」和「endkey」
  3. 爲此單一請求構建一個特殊視圖。例如,如果登錄字符串是「搜索」,則發出-1。否則,發出登記百分比。然後,用startkey(-1)和endkey(99)查詢。在客戶端,像處理搜索一樣處理-1值。

注意:至於解決方案3,它可以以另一種方式處理,但我已經做盡我所能與我的信息。

+0

對於3,當搜索是「搜索」時,你如何選擇發射-1?據我的理解,沒有辦法將參數傳遞給'map'函數,所以我不能決定何時發射-1或另一個值。謝謝 – OrangePot

+0

在JavaScript函數中調用emit函數。所以你可以做,如果(loginstring ==「搜索」)發出(-1,val) –

+0

'「搜索」'是從用戶輸入。我不能像你那樣用硬編碼的方式將它寫入'if' – OrangePot