PyMongoでGroup byした最大値を求めるには、以下のコードのようにJavaScript Functionを使用して最大値を求めます。
# coding=UTF-8
from pymongo import *
conn = Connection("localhost", 27017)
conn.local.drop_collection("sales_by_year_area")
col = conn.local.sales_by_year_area
# データをinsert
col.insert({"year":2009, "area":"North", "sales":100})
col.insert({"year":2009, "area":"South", "sales":150})
col.insert({"year":2010, "area":"North", "sales":200})
col.insert({"year":2010, "area":"South", "sales":250})
col.insert({"year":2011, "area":"North", "sales":300})
col.insert({"year":2011, "area":"South", "sales":350})
# 地域毎の年間最高売上を表示する
for obj in col.group(
key={"area":True},
condition={},
initial={"cmax":0},
reduce="function(obj,prev){if(prev.cmax < obj.sales)prev.cmax=obj.sales;}"):
print str(obj[u"area"]) + ":" + str(obj[u"cmax"])
補足
ubuntuで以下のコマンドでMongoDBとPyMongoのインストールができます。
sudo apt-get install mongodb
sudo apt-get install python-pymongo
動作環境
Python 2.6.6, PyMongo 1.7, mongodb1.4.4