地图中重复的'值'标记减少

时间:2013-08-10 22:01:05

标签: python mongodb mapreduce

我正在尝试使用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':你' - 65q1FpAL_UQtVZ2PTGew',u'value':{business:rating},{business:rating}}

但我得到的是     {u'_id':你' - 65q1FpAL_UQtVZ2PTGew',你的价值':[你'':[[你'':[你'':[{商业:评级},{商业:评级}。 ..

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

1 个答案:

答案 0 :(得分:0)

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

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

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