我正在尝试使用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',你的价值':[你'':[[你'':[你'':[{商业:评级},{商业:评级}。 ..
如何从输出中删除所有额外的“值”标记?
答案 0 :(得分:0)
您是否考虑过使用aggregation?它通常比mapReduce更有效,并且似乎更适合您的应用程序。例如,您的问题的聚合解决方案是:
db.coll.aggregate({ $group: { _id: "$user_id",
values: { $push: { business_id: "$business_id",
stars: "$stars" }}}});
然后,您可以将结果保存到新集合或其他任何您喜欢的集合中。