0

我正在尝试使用 map reduce 将用户的业务评级汇总到一个集合中。

mapper = Code("""
              function(){
              var userID = this.user_id;
              var business = this.business_id;
              var rating = this.stars;

              emit(userId, {business_id: business, stars: rating});
              """)

reducer = Code("""
              function(key, values){
              var results = new Object();
              results.values = values;
              return results;

我希望得到 {u'_id': u'--65q1FpAL_UQtVZ2PTGew', u'value': {business: rating}, {business: rating}}

但我得到的是 {u'_id': u'--65q1FpAL_UQtVZ2PTGew', u'value': [u'values':[[u'values':[ u'values': [{business: rating} ,{业务:评级}...

如何从输出中删除所有额外的“值”标签?

4

1 回答 1

0

您是否考虑过使用聚合?它通常比 mapReduce 更有效,并且似乎更适合您的应用程序。例如,您的问题的聚合解决方案是:

db.coll.aggregate({ $group: { _id: "$user_id", 
                    values: { $push: { business_id: "$business_id", 
                                       stars: "$stars" }}}});

然后,您可以将结果保存到新集合或您喜欢的任何其他集合中。

于 2013-09-20T14:48:42.853 回答