重写将标记转换为整数参数的规则

时间:2011-05-31 09:58:53

标签: map couchdb reduce couchapp cloudant

在对排名记录进行大量摔跤之后,我最终确定了我的文档的基于数字的分数,我根据这些分数对其进行排序。

现在这些数字有意义,前2位数代表特定类型的文件。

因此,为了获得基于分数排序的22类文档,我只需查询视图,其中开始键为220000,结束键为229999

这一切都很棒并且有效,当我尝试使用url重写时,我的问题就出现了。

我基本上是想重新路由:

/_rewrite/rankings/{doctype}

/_list/rankings?startkey=xx0000&endkeyxx9999

其中xx是{doctype}

我的问题是指定重写规则:

[
    { "from":"rankings/:doctype",
      "to":"_list/rankings",
      "query": ??? //what will this be?
]
  • 如何通过分别附加0000和9999来构建开始和结束键?

  • 如何指定数值?因为使用占位符“:doctype”将导致字符串类型而不是数字类型,导致查询失败,即使我要修改我的漂亮URL以输入开始和结束键。

  • 我通过在列表视图中过滤结果来解决这个问题(忽略了对getRow()不感兴趣的文档),我在这里担心,我现在应该担心列表函数的效率吗?

也可以自由评论我的排序策略..有兴趣知道其他人如何解决他们对couchdb的排序和切片问题

1 个答案:

答案 0 :(得分:1)

解决方案

首先,您应该在数组中单独发出类型得分,而不是连接它们:

emit([doc.type, doc.score], doc);

然后你可以像这样重写

[
  {
    "from"  : "rankings/:doctype",
    "to"    : "_list/rankings/rankings",
    "query" : {
      "startkey" : [":doctype", 0],
      "endkey"   : [":doctype", 9999]
    },
    "formats": {
      "doctype" : "int"
    }
  }
]

我在CouchDB 1.1.1上进行了测试,但它确实有效。

参考

相关文档隐藏在JIRA的这个问题中:COUCHDB-1074

如您所见,该问题于2011年4月得到解决,因此它应该适用于CouchDB 1.0.3及更高版本。