CouchDb:如何将查询和更新请求合并为一个?

时间:2013-03-09 16:47:50

标签: couchdb

我的couchDb文档的结构是这样的

帖子

 {
      _id : '123132adsf',
    'userId' :'7236jsdfkaf',
     'Title' : 'This is a sample post'
}

用户

{
   '_id' : '7236jsdfkaf',
   'count' : 1
}

我正在寻找的功能是每当使用帖子查询帖子文档时查看拥有的用户中的计数字段这个帖子是更新的。有没有办法用一个couchDb请求做这个或者我必须向数据库发出两个请求,一个用于查询,一个用于更新。

2 个答案:

答案 0 :(得分:1)

严格地说,从视图中阅读时,您需要在其他地方添加功能。

在CouchDB中,您需要能够读取用户文档(和修订版),并在只读View操作期间将其设置回来。

文档get请求在读取期间不能影响(甚至读取)其他文档(视图也是只读的)。对于给定的文档版本,读取旨在可缓存。即使CouchDB的showdocs)和list功能也可以防止这种情况发生。

其他说明:

另外,考虑CouchDB的问题不一定是进行自动递增字段的最佳选择。 Here是一个很好的StackOverflow答案,详细说明了您可能面临的一些挑战。从本质上讲,您可能会发现由于在CouchDB中管理文档修订的方式,频繁的计数器递增(例如您需要),而不经常进行数据库压缩可能会导致磁盘利用率过高。其他系统可能更适合进行页面查看计数。

如果您使用了使用Update函数(docs)的建议,那么您已经使缓存页面/帖子更加昂贵,并且要求CouchDB实例始终返回修订后的文档/帖子,每次请求帖子时,这都是非常不必要的(如果可能的话,应该在网络层缓存)。

答案 1 :(得分:1)

如果你知道该帖子的身份,你可以这样做。您可以使用update functionviewed字段的值更改为帖子文档中的1,并返回帖子的数据。不过,这是肮脏的黑客。相反,您将使用用户文档中的count,然后为用户减少viewed的总和。问题是,你必须知道帖子之前的id,因为更新函数不能进行任意查询 - 它会修改它所给出的文档。