1

刚开始。

我有一个关于 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:我知道POST 一个 JSON 键数组的选项。我还没有尝试过。通过阅读文档,我应该能够执行 GET 并在查询字符串中指定多个键。


编辑

我刚刚尝试了 POST 选项。它按预期工作。换句话说,这个 HTTP 请求:

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

{"keys":["amet"]}

..返回我期望它返回的内容:一些匹配的文档。

因此,我不再被阻止,但我仍然感到困惑的是,用于指定键的 GET / URI 编码形式在 Cloudant 上不起作用。

4

1 回答 1

1

我记得有这个问题,我认为这是 CouchDB 中的一个老错误。您正在运行哪个版本的沙发?GET带有参数的 Akeys现在在 1.2.0 中为我工作。IIRC 该错误在 1.0.x 中

于 2012-06-28T20:08:16.327 回答