2012-06-28 21 views
1

剛開始。爲什麼我向Cloudant返回所有文檔的多鍵GET查詢?

我有一個關於cloudant,bywords的視圖,它提供了所有文檔及其關鍵字的視圖。它看起來像這樣:

bywords = function(doc) { 
    var tokens, re1, 
     uniq = function(a) { 
      var o = {}, i = 0, L = a.length, r = []; 
      for (; i < L; i++) { 
       if (a[i] !== '' && a[i] !== ' ') { 
        o[a[i]] = a[i]; 
       } 
      } 
      for (i in o) { r.push(o[i]); } 
      return r; 
     }; 

    if (doc.observation && doc.observation !== '') { 
     tokens = uniq(doc.observation.split(/(+)|\./)); 
     if (tokens && tokens.length > 0) { 
      tokens.map(function(token) { 
       emit(token, null); 
      }); 
     } 
    } 
}; 

(我不認爲這是一個unique FN提供給我的設計文檔,以便查看FN定義自己。)

認爲長相的結果像這樣:

.... 
{ 
"id": "doc-095141", 
"key": "Vivamus", 
"value": null 
}, 
{ 
"id": "doc-102754", 
"key": "Vivamus", 
"value": null 
}, 
{ 
"id": "doc-094047", 
"key": "volutpat", 
"value": null 
}, 
{ 
"id": "doc-092332", 
"key": "vulputate", 
"value": null 
}, 
.... 

對於每個文檔,視圖中有一個項目,對於文檔的特定字段中的每個單詞。

好的...

按鍵查詢很好。我的意思是,這樣的:

https://myserver.cloudant.com/fop/_design/baseViews/_view/bywords?key=%22amet%22

...返回從視圖中的項目預計子集。這是少數幾個項目,少於10.

另一方面,多鍵查詢返回視圖中的所有項目。如果我這樣做:

https://.../_design/baseViews/_view/bywords?keys=%5B%22amet%22%5D

...然後我讓每一個項目。許多許多項目。不是我想要的。

如何在GET中指定多個密鑰?

我不相信我想要startkeyendkey。我想要的鑰匙出現在我指定的集合中。


ps:我知道the option to POST a JSON keys array。我還沒有嘗試過。在閱讀文檔時,我應該可以執行GET並在查詢字符串中指定多個鍵。


編輯

我只是嘗試了POST選項。它按預期工作。換句話說,這個HTTP請求:

POST https://myserver.cloudant.com/fop/_design/baseViews/_view/bywords 
...headers here... 

{"keys":["amet"]} 

..返回我期望它返回的結果:少數匹配的文檔。

因此,我不再被阻止,但對於我來說,指定密鑰的GET/URI編碼形式在Cloudant上不起作用。

回答

1

我記得有這個問題,我認爲這是CouchDB中的一箇舊bug。你正在跑哪個版本的沙發? A GETkeys參數適用於我現在在1.2.0。 IIRC錯誤在1.0.x

+0

我正在使用Cloudant.com。我不知道他們正在運行什麼版本的CouchDB。 – Cheeso

+0

只需點擊服務器的'/',它就會報告版本。 – smathy

+0

'{「couchdb」:「Welcome」,「version」:「1.0.2」,「cloudant_build」:「613」}'那麼,Cloudant中可能還存在這個錯誤?任何機會你有一個傑拉鏈接該錯誤? – Cheeso

相關問題