我在使用多个键时获取couchdb视图以返回正确的文档时遇到问题。
这工作正常,返回匹配的文档:
GET http://example.com:5984/myDb/_design/myFilters/_view/getItemByForeignKeyId?key=abc123
返回返回视图中的所有文档,匹配与否:
GET http://example.com:5984/myDb/_design/myFilters/_view/getItemByForeignKeyId?keys=%5B%22abc123%22%5D
我通常非常擅长寻找答案。但是,CouchDB文档对使用多个密钥的格式非常清楚。我见过一些使用?keys = [123,123]而且我也见过?keys =“abc”,“abc”。
如果有人能够使用GET方法对CouchDB的“正确”格式和多个关键查询的编码做出任何澄清,我将非常感激。
要从视图中获取多个密钥,您需要执行发布请求并在请求正文中提交密钥。您的HTTP请求将如下所示:
POST /myDb/_design/myFilters/_view/getItemByForeignKeyId
Content-Type: application/json
{
"keys" : [
"abc",
"123"
]
}
function(doc){
{
if([doc.key1, doc.key2])
emit([doc.key1, doc.thingYouWantToKnow]);
}
}
并在查询字符串中,最后
?key=["key1Value", "key2Value"]
请注意,它是key=[]
,而不是keys=[]
!!!!!!!!!
不是说它是正确的,但你也可以通过查询字符串来实现。不应对包含括号的数组进行编码。例如。这对我有用:
http://localhost:5984/test/_design/artists_albums/_view/albums_by_artist?keys=[%22Super%20bad%20artist%22,%20%22Fake%20artist%201%22]