Cloudant是否支持将重写作为函数?

时间:2017-03-30 17:57:23

标签: cloudant

我有一个Cloudant数据库,我想为包含斜杠的文档制作漂亮的URL。所以我定义了一个重写函数:

{
  "_id": "_design/myRewrites",
  "rewrites": "function (req2) {\n    return {path: \"../../../\" + req2.path.slice(4).join(\"%2F\")};\n}"
}

更好地格式化重写函数:

function (req2) {
  return {path: "../../../" + req2.path.slice(4).join("%2F")};
}

According to the CouchDB docs,CouchDB自CouchDB 1.7以来一直支持这种重写(作为字符串化函数),但Cloudant's documentation并未谈论此特定功能(仅从数组重写)。

这反映在我试用https://myAccount.cloudant.com/myDb/_design/myRewrites/_rewrite/hello/world/时的经验中,我收到以下回复:

{"error":"unknown_command","reason":"unknown ddoc command 'rewrites'"}

但是我读到Cloudant和CouchDB从2.0开始就匹配它们的源代码,所以我希望Cloudant支持所有CouchDB功能。这笔交易是什么?

另请参阅以下关于此的推文,其中IBM要求我对StackOverflow提出问题并建议我可能在过时的群集上:https://twitter.com/digitalheir/status/845910843934085120

我的数据位置是" Porter,London"。如果我改变了它会有帮助吗?

1 个答案:

答案 0 :(得分:2)

tl; dr:抱歉,但没有。 Cloudant不支持将重写作为函数:(

我们尝试了您的示例并获得了相同的结果。深入挖掘,我现在可以确认Cloudant不支持通过字符串化函数进行URL重写。该服务仅支持使用数组方法重写。

我不能肯定地说,但我怀疑团队忽略了这个功能。也就是说,Cloudant不太可能很快支持重写,因为当前的方法不能很好地扩展,因为如果视图经常更新,它可能会使数据库陷入困境。这与Cloudant建议人们使用内置reduce函数(在Erlang中实现)的原因类似,而不是编写自己的自定义JavaScript缩减。

重写为数组但是会缩放。但是,如果您动态生成URL,这种方法显然不会起作用。在这种情况下,我们建议将URL重写功能移动到应用服务器。不幸的是,如果您正在构建CouchApp:/

,这可能是一个没有实际意义的点

这令人困惑,所以谢谢你指出来。我将要求Cloudant团队在文档中注意到这种差异。希望这至少有助于提供一些关闭。期待它发挥作用并没有错。