2

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

然后我设置了一个虚拟主机并正在使用重写,我对“zip”的重写看起来像这样。

{from: "/zip/:zip", to: "_view/zip",  query: {"key": ":zip"}}

对我来说,这似乎应该是正确的,但是当我尝试使用重写 url 查询视图时,它总是返回零行。

重写网址:

http://partslocatordev.com:5984/zip/48114

回复:

{
    "total_rows": 41683,
    "offset": 41683,
    "rows": []
}

我在这里错过了什么吗?

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

4

1 回答 1

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

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

于 2013-07-08T18:14:27.843 回答