附加到couchdb重写规则中的变量

时间:2018-02-25 20:52:57

标签: couchdb

我正在尝试创建一个重写规则,用一个以字符串开头的键来读取视图。

我可以在没有重写的情况下做到这一点,但我正在努力用重写来做。

使用直接查询进行访问。

curl -g -H "Accept: application/json" \
    'http://127.0.0.3:80/bookmarks/_design/design/_view/webmarks-by-url?include_docs=true&reduce=false&startkey=["www.sciencemuseum.org.uk"]&endkey=["www.sciencemuseum.org.uk/\ufff0"]' | json_pp

然后我尝试用rewrites.json

来做
{
    "from": "bookmarks_by_url/:~name:",
    "to": "_view/webmarks-by-url",
    "query": {
        "reduce": "false",
        "include_docs": "true",
        "descending" : "false",
        "startkey": [":~name:"],
        "endkey": [":~name:\ufff0"]
    }       
},

我想要什么,但这显然无法奏效。有没有办法说这是一个变量的结束?或者另一种写规则的方式?

{
    "from": "bookmarks_by_url/:~name:",
    "to": "_view/webmarks-by-url",
    "query": {
        "reduce": "false",
        "include_docs": "true",
        "descending" : "false",
        "startkey": [":~name:"],
        "endkey": [":~name:" + "\ufff0"]
    }       
},

重写规则的文档非常糟糕,如果您知道更好的文档,请链接。

1 个答案:

答案 0 :(得分:0)

如果您使用Couch 2.1+,您可以使用JS rewrites来使用纯JS函数进行请求路由。

包含.rewrites部分,包含路由器功能的字符串表示,您可以处理非常复杂的路由。此外,您甚至可以直接从重写功能提供响应。

然而,使用JS重写你也有所有JS查询服务器处罚。他们是:

  • 您为每个请求延迟添加几毫秒。
  • 你的重写fn是一个单线程的瓶颈,你不能处理比​​重写fn能够处理的更多的请求。
  • 由于Couch中的每个JS引擎实例对于编译的代码和数据都只有64Mb的RAM,因此无法处理大型POST请求。
  • Couch中的所有QS功能都很难调试,重写也不例外。
  • 您不能同时使用旧的数组语法(更快)和一个设计文档中的函数。

由于我个人大量使用JS重写,我可以说专业人士比利弊重得多。 There is an article包含与JS重写相关的一些性能细节。