在 CouchDB 中,我创建了一个名为“zip”的 View , map 如下所示;
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"
}
现在,当我像这样直接查询 View 时,
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"
}
}
]
}
然后我设置了一个虚拟主机并正在使用重写,我对“zip”的重写如下所示。
{from: "/zip/:zip", to: "_view/zip", query: {"key": ":zip"}}
对我来说,这似乎应该是正确的,但是当我尝试使用重写 URL 查询 View 时,它总是返回零行。
重写网址:
http://partslocatordev.com:5984/zip/48114
回复:
{
"total_rows": 41683,
"offset": 41683,
"rows": []
}
我在这里遗漏了什么吗?
注意:我以与其他 View 相同的方式使用重写,并且它们有效,但我无法弄清楚为什么这个特别不能。
最佳答案
重写器可能正在查询 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)
}
}
这将处理邮政编码不是整数的情况,例如在英国。
关于url-rewriting - CouchDB:使用重写查询带有键的 View 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17531246/