具有多键格式的CouchDB查询视图

时间:2013-05-26 20:14:59

标签: views key couchdb

我在使用多个密钥时获取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的“正确”格式和编码进行任何澄清,我将非常感激。

3 个答案:

答案 0 :(得分:17)

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

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

{
   "keys" : [
      "abc",
      "123"
   ]
}

答案 1 :(得分:7)

function(doc){
    {
        if([doc.key1, doc.key2])
            emit([doc.key1, doc.thingYouWantToKnow]);
    }
}

并在查询字符串中,在结尾

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

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

答案 2 :(得分:4)

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

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