CouchDB:使用重写使用密钥查询视图时遇到问题

时间:2013-07-08 16:10:21

标签: rewrite couchdb

在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": []
}

我在这里遗漏了什么吗?

注意:我正在以与其他视图相同的方式使用重写并且它们可以工作,但我无法弄清楚为什么这个特别不是。

1 个答案:

答案 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)
    }
}

这将处理邮政编码不是整数的情况,例如在英国。