2013-06-27 9 views
1

Я использую PyMongo и имею коллекцию с примерно 5 миллионами записей. Каждая запись имеет поле кода страны.PyMongo статистика

Какой самый элегантный способ (и лучше производительность мудрым?), Чтобы получить статистические данные, такие как:

US - 302000 
CA - 180000 
IN - 160000 
DE - 125000 
... 

ли MongoDB имеют специальный вид запроса для этого, или я должен сделать это в цикле с обычный словарь Python?

редактировать: Пример записи:

update(
    {"id": user["id"]}, 
    {"$set": { 
     ... some other fields 
     "_country_code": "US", 
     "_last_db_update": datetime.datetime.utcnow()} 
    }, upsert=True) 
+1

Не могли бы вы показать пример записи в сборнике? – alecxe

+0

ОК, я добавил один. – horace

+0

Номера, которые вы пытаетесь получить для каждого поля '_country_code', - это сколько документов с кодом страны? – alecxe

ответ

3

Похоже, это задача для mongodb aggregation framework:

db.collection.aggregate([{$group: {_id: "$_country_code", count: {$sum: 1}}}]) 

даст результаты, как:

{ 
    "result" : [ 
     { 
      "_id" : "US", 
      "count" : 302000 
     }, 
     { 
      "_id" : "CA", 
      "count" : 180000 
     }, 
     ... 
    ], 
    "ok" : 1 
} 

тот же запрос используя pymongo:

db.command('aggregate', 'collection', pipeline=[{"$group": {"_id": "$_country_code", "count": {"$sum": 1}}}]) 

Надеюсь, что это поможет.

+0

Да, похоже, что мне нужно! Спасибо! – horace

Смежные вопросы