Matthewl 发表于 2018-8-4 11:01:55

python编写mongodb中的map/reduce

#!/usr/bin/env python  
# -*- encoding:utf-8 -*-
  
from pymongo import Connection
  
from bson.code import Code
  
from bson.son import SON
  
mongoconn = Connection('192.168.0.203',27017)
  
db = mongoconn['things']["user_info"]
  
db.drop()
  
db.insert({"uid":"a123","type":"man","class":2,"score":{"math":80,"english":60,"chinese":90}})
  
db.insert({"uid":"b123","type":"female","class":2,"score":{"math":100,"english":90,"chinese":80}})
  
db.insert({"uid":"c123","type":"man","class":2,"score":{"math":60,"english":50,"chinese":88}})
  
db.insert({"uid":"d123","type":"female","class":2,"score":{"math":79,"english":87,"chinese":78}})
  
db.insert({"uid":"e123","type":"female","class":1,"score":{"math":79,"english":87,"chinese":78}})
  
map = Code("function() {"
  
"   emit(this.class,this.score);"
  
"}"
  
)
  

  
reduce = Code("function(key,values){"
  
"    var result={math:0,english:0,chinese:0};"
  
"   for (var i = 0; i < values.length; i++) {"
  
"       result.math += values.math;"
  
"       result.english += values.english;"
  
"       result.chinese += values.chinese;"
  
"   return result;"
  
"}"
  
)
  
results = db.map_reduce(map,reduce,"class_user")
  
a = db.find({"class":2})
  
b = a.count()
  
for i in results.find({"_id":2}):
  
print "*********************************************************"
  
print i
  
print "math average score is :",i["value"]["math"]/b
  
print "english average score is :",i["value"]["english"]/b
  
print "chinese avarege score is :",i["value"]["chinese"]/b
页: [1]
查看完整版本: python编写mongodb中的map/reduce