15

使用多个键时,我无法让 couchdb 视图返回正确的文档。

这工作正常,返回匹配的文档:

获取http://example.com:5984/myDb/_design/myFilters/_view/getItemByForeignKeyId?key=abc123

这将返回视图中的所有文档,无论是否匹配:

获取http://example.com:5984/myDb/_design/myFilters/_view/getItemByForeignKeyId?keys=%5B%22abc123%22%5D

我通常非常擅长寻找我的答案。但是,CouchDB 文档对使用多个键的格式非常清楚。我见过一些使用 ?keys=[123,123] 并且我也见过 ?keys="abc","abc"。

如果有人可以使用GET方法对 CouchDB 的多个键查询的“正确”格式和编码提供任何说明,我将不胜感激。

4

3 回答 3

20

要从一个视图中获取多个键,您需要进行发布请求并在请求正文中提交键。您的 HTTP 请求将如下所示:

POST /myDb/_design/myFilters/_view/getItemByForeignKeyId
Content-Type: application/json

{
   "keys" : [
      "abc",
      "123"
   ]
}
于 2013-05-26T20:47:24.490 回答
9
function(doc){
    {
        if([doc.key1, doc.key2])
            emit([doc.key1, doc.thingYouWantToKnow]);
    }
}

在查询字符串中,最后

?key=["key1Value", "key2Value"]

请注意,它是key=[],不是keys=[]!!!!!!!!!

于 2014-09-26T23:29:40.087 回答
5

并不是说它是正确的,但是您实际上也可以通过查询字符串来做到这一点。不应对包含括号的数组进行编码。例如,这对我有用:

http://localhost:5984/test/_design/artists_albums/_view/albums_by_artist?keys=[%22Super%20bad%20artist%22,%20%22Fake%20artist%201%22]

于 2013-05-29T21:23:41.813 回答