Mapreduce 在couchdb/cloudant中,是否可以将一组“评级”映射/减少为“关系”?

Mapreduce 在couchdb/cloudant中,是否可以将一组“评级”映射/减少为“关系”?,mapreduce,couchdb,cloudant,Mapreduce,Couchdb,Cloudant,我有评级文档,记录用户对某个项目的评级,如下所示: accountID: a1, itemID: i1, rating: 1 accountID: a2, itemID: i1, rating: 1 accountID: a3, itemID: i1, rating: 1 accountID: a1, itemID: i2, rating: 1 accountID: a2, itemID: i3, rating: 1 我想创建一个视图,显示哪些用户对同一项目进行了评分,以及评分次数。根据上述数

我有评级文档,记录用户对某个项目的评级,如下所示:

accountID: a1, itemID: i1, rating: 1
accountID: a2, itemID: i1, rating: 1
accountID: a3, itemID: i1, rating: 1
accountID: a1, itemID: i2, rating: 1
accountID: a2, itemID: i3, rating: 1
我想创建一个视图,显示哪些用户对同一项目进行了评分,以及评分次数。根据上述数据,我们发现a1、a2和a3对相同的项目i1进行评级,而i2和i3仅单独进行评级。结果集应如下所示:

accountID1: a1, accountID2: a2, numMatches: 1
accountID1: a1, accountID2: a3, numMatches: 1
accountID1: a2, accountID2: a3, numMatches: 1
这表明a1和a2都对同一项目进行了一次i1评级,a1和a3也是如此,a2和a3都对i1进行了评级。其他项目被忽略,因为只有一个用户对它们进行了评级


在couchdb/cloudant中使用map/reduce可以实现这种转换吗?或者我必须在客户端通过提取给定项目的所有评分并运行每个帐户来进行计算吗?

解决这一问题的一种方法是在itemId+userId上建立索引,将评分作为一个值发出,然后使用_stats获取您想要的任何信息。这是您的设计文档:

{
  _id: "_design/count_shared_reviews",
  views: {
    "count_shared_reviews": {
      map: function(doc) {
        emit([doc.itemID, doc.accountID], doc.rating);
      }.toString(),
      reduce: "_stats"
    }
  }
}
那么你可以做什么http://localhost:5984/testdb1/_design/count_shared_ratings/_view/count_shared_ratings?reduce=true&group=true&group_level=1,它将按级别1进行分组,即项目ID,为您提供:

{"rows":[
  {"key":["i1"],"value":{"sum":3,"count":3,"min":1,"max":1,"sumsqr":3}},
  {"key":["i2"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}},
  {"key":["i3"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}}
]}
您还可以按所有内容分组,在这种情况下,您将获得每个用户、每个项目的摘要http://localhost:5984/testdb1/_design/count_shared_ratings/_view/count_shared_ratings?reduce=true&group=true:

这有意义吗

{"rows":[
  {"key":["i1","a1"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}},
  {"key":["i1","a2"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}},
  {"key":["i1","a3"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}},
  {"key":["i2","a1"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}},
  {"key":["i3","a2"],"value":{"sum":1,"count":1,"min":1,"max":1,"sumsqr":1}}
]}