我正在考虑将 CouchDB 用于即将推出的网站,但就如何为该网站实现用户评分系统而言,我有点困惑。基本上,每个内容项都可以由给定用户评分。哪种方式在 CouchDB 模型中最有意义?我认为最干燥和最合乎逻辑的方法是拥有 3 种不同的文档类型,内容、用户和一个看起来像这样的 user_rating 文档。

{
用户 ID:“用户 ID”
content_id: "内容 ID"
评分:6
}

然后,我将创建一个 View ,其中 map 是由内容文档 ID 键控的所有内容文档和 user_rating 文档的集合,其中 reduce 计算评级的平均值并返回由内容文档 ID 键控的内容文档。

这是最好的方法吗?我还没有找到太多关于 CouchDB 最佳实践的资源,所以我对所有这些东西都不太确定。

我的结论:
下面接受的答案,这是我几乎要实现的工作,但请注意,文档需要由内容文档 id 键控,这使得基于其他文档属性的高级查询变得很麻烦。我将回到 SQL 来满足我在这个应用程序中的需要。

最佳答案

听起来你有一个合理的想法。 CouchDB 太新了,我认为最佳实践需要一段时间才能动摇。

像这样的 map/reduce 对可能会形成一个合理的起点。

map :

function(doc) {
   if(doc.type='rating' && doc.content_id) {
     emit(doc.content_id, doc.rating);
   }
}

减少:
function(keys, values) {
   return sum(values)/values.length
}

注意:该 map 函数需要向您的 Rating 模型添加正确的类型:
{
  type: 'rating',
  user_id: "USERID",
  content_id: "CONTENTID",
  rating: 6
}

关于couchdb - 在 CouchDB 上实现用户评分/收藏夹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/501304/

10-16 21:29