2012-06-28 26 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