在文档更新处理程序中获取文档

时间:2017-03-09 15:59:42

标签: couchdb

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

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

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

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

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

非常感谢

编辑:我应该补充一点,我知道我可以创建一个小应用程序来解析请求,然后转发到couchdb,但我有兴趣看看我是否可以在couchdb中实现这个,只是为了了解我可以在没有另一个的情况下获得多远层!

1 个答案:

答案 0 :(得分:1)

在您的特定情况下,执行此操作非常困难。文档更新处理程序基本上是一个纯函数,它可以获取所需的数据并返回响应,但它无法访问数据库。

如果您向网址添加文档ID,则更新功能会将数据库中的文档作为参数获取。有关详细信息,请参阅the CouchDB docs for update functions

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

为了推动限制,使用重写功能听起来很有趣。但对于生产用例,创建一个解析正文的小node.js应用程序可能更容易,也更易于维护。