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