在CouchDB中,我创建了一个名为“zip”的视图,地图看起来像这样;
function (doc) {
if(doc.type == 'zip') {
emit(doc.zip_code, doc)
}
}
然后我添加了一堆与邮政编码相关的文档,示例文档就像这样;
{
"_id": "zip/48114",
"_rev": "1-990b2c4f682ed0b6a27e2fa0c066c93d",
"zip_code": 48114,
"state": null,
"county": null,
"rep_code1": "INTL2",
"rep_code2": "MI1",
"type": "zip"
}
现在我直接查询视图时,
http://localhost:5984/partslocator/_design/partslocator/_view/zip?key=48114
我得到了我期待的那一行;
{
"total_rows": 41683,
"offset": 20391,
"rows": [
{
"id": "zip/48114",
"key": 48114,
"value": {
"_id": "zip/48114",
"_rev": "1-990b2c4f682ed0b6a27e2fa0c066c93d",
"zip_code": 48114,
"state": null,
"county": null,
"rep_code1": "INTL2",
"rep_code2": "MI1",
"type": "zip"
}
}
]
}
然后我设置了一个vhost并使用了重写,我对'zip'的重写看起来像这样。
{from: "/zip/:zip", to: "_view/zip", query: {"key": ":zip"}}
对我而言,这似乎应该是正确的,但是当我尝试使用重写URL查询视图时,它总是返回零行。
重写网址:
http://partslocatordev.com:5984/zip/48114
响应:
{
"total_rows": 41683,
"offset": 41683,
"rows": []
}
我在这里遗漏了什么吗?
注意:我正在以与其他视图相同的方式使用重写并且它们可以工作,但我无法弄清楚为什么这个特别不是。
答案 0 :(得分:2)
重写者可能正在查询zip?key=":zip"
而不是zip?key=:zip
。您可以在重写器中使用formats
字段来命名应该键入不同参数的方式。在这种情况下,试试这个:
{
from: "/zip/:zip",
to: "_view/zip",
query: {"key": ":zip"},
formats: {
"zip": "int"
}
}
或者,在map函数中,发出一个字符串作为ID而不是数字,如下所示:
function (doc) {
if(doc.type == 'zip') {
emit(String(doc.zip_code), doc)
}
}
这将处理邮政编码不是整数的情况,例如在英国。