刚开始。
我有一个关于cloudant的视图,用于提供所有文档及其关键字的视图。它看起来像这样:
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中指定多个键?
我不相信我想要startkey
和endkey
。我希望我指定的集合中存在键的项目。
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不起作用仍然是个难题。
答案 0 :(得分:1)
我记得有这个问题,我认为这是CouchDB中的一个老错误。你正在运行哪个版本的沙发?带有GET
参数的keys
现在可以在1.2.0中使用。 IIRC的bug在1.0.x