我正在考虑将 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/