1

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

帖子

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

用户

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

我正在寻找的功能是每当使用帖子视图查询帖子文档时,拥有帖子的用户中的计数字段就会更新。有没有办法通过单个 couchDb 请求来做到这一点,或者我必须做两个对数据库的请求一个用于查询,一个用于更新。

4

2 回答 2

2

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

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

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

其他注意事项:

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

如果您使用了使用Update函数 ( docs ) 的建议,那么缓存页面/帖子的成本会更高,并且每次请求帖子时都要求 CouchDB 实例始终返回修改后的文档/帖子,这是非常不必要的(并且应该如果可能,缓存在 Web 层上)。

于 2013-03-09T17:32:07.843 回答
2

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

于 2013-03-09T19:35:52.937 回答