2017-03-09 46 views
1

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

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

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

  • 更新做了POST而不是PUT
  • 似乎没有要发送任何查询方式参数

由于ID为这所需要的文件要更新是在体内,我可以用它来查询数据库中的文档,获取_rev,并用_id和_rev返回有效负载来执行更新。但是,我根本不知道是否可以在更新处理程序中执行此类查询。我觉得我要么失去了一些显而易见的东西,要么我有一个很好的理由,我不会这样做。

非常感谢

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

回答

1

你的具体情况,这是非常难以做到这一点。文档更新处理程序基本上是一个纯函数,它获取它所需的数据并返回响应,但无法伸出数据库。

如果添加一个文件编号的URL,更新函数从数据库作为参数文档。详情请参阅the CouchDB docs for update functions

的方式一个可能的解决方案是使用在CouchDB中的重写,以便从身体提取的ID。在CouchDB 2.0中,rewrites as functions has been introduced的新方法。

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

+0

很好的答案,非常感谢。真的很高兴知道重写功能,因为它以某种方式传递给我。我同意这可能不是生产用途的最佳选择,但肯定有兴趣看看。 – gtek