Cloudant 是否支持重写为函数?

Does Cloudant support rewrites as functions?

我有一个 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 has supported this kind of rewriting (as stringified functions) since CouchDB 1.7, but 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 让我在 Whosebug 上提问,并建议我可能在一个过时的集群上:https://twitter.com/digitalheir/status/845910843934085120

我的数据位置显示 "Porter, London"。如果我改变这个会有帮助吗?

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

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

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

重写为数组,但是可以缩放。但是,如果您动态生成 URL,这种方法显然行不通。在这种情况下,我们建议将 URL 重写功能移至应用服务器。不幸的是,如果你正在构建一个 CouchApp,这一切都可能是一个有争议的问题:/

这令人困惑,感谢您指出。我将要求 Cloudant 团队在文档中注明这一差异。希望这至少有助于提供一些关闭。您期望它会起作用并没有错。