【问题标题】:GETting a document within a Document Update Handler在文档更新处理程序中获取文档
【发布时间】:2017-03-11 03:54:01
【问题描述】:

是否可以从 CouchDB 的文档更新处理程序中查询 (GET) 文档?

我在 CouchDB 2.0 中编写了一个简单的文档更新处理程序来接受来自第三方 (CognitoForms) 的 POST。这很好用,我从他们的 JSON 有效负载中获取 ID 并将其用作 doc _id。

然后您可以在 CognitoForms 中指定一个“更新”URI,这样我就可以创建一个新的更新处理程序或使用相同的处理程序。但是,在 CognitoForms 中:

  • 更新执行 POST 而不是 PUT
  • 似乎没有办法发送任何查询参数

由于需要更新的文档的 ID 在正文中,我可以使用它来查询数据库中的文档,获取 _rev,并返回带有 _id 和 _rev 的有效负载以执行更新。但是,我根本不知道是否可以在更新处理程序中进行这样的查询。我觉得我要么遗漏了一些明显的东西,要么有一个很好的理由不允许我这样做。

非常感谢

编辑:我应该补充一点,我知道我可以创建一个小型应用程序来解析请求,然后再转发到 couchdb,但我很想看看我是否可以在 couchdb 中实现它,只是为了了解没有另一个应用程序我能走多远层!

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    在您的特定情况下,很难做到这一点。文档更新处理程序基本上是一个纯函数,它获取所需的数据并返回响应,但它无法访问数据库。

    如果在 url 中添加 doc id,更新函数会从数据库中获取 doc 作为参数。详情见the CouchDB docs for update functions

    可能的解决方案是在 CouchDB 中使用重写以从正文中提取 id。在 CouchDB 2.0 中,rewrites as functions has been introduced 的新方法。

    为了突破极限,为此使用重写功能听起来很有趣。但对于生产用例,创建一个解析主体的小型 node.js 应用程序可能更容易且更易于维护。

    【讨论】:

    • 很好的答案,非常感谢。真的很高兴知道重写功能,因为它不知何故让我擦肩而过。我同意它可能不是生产用途的最佳选择,但看看肯定很有趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多