получить счет и сгруппировать их

Я использую питон с пимонго.

В одной из коллекций монго сохраняются разные сообщения из разных стран. Каждый документ будет иметь один короткий код страны для указания своей страны. Могу ли я узнать, как я могу сгруппировать их и получить счет для каждого кода страны?

Например

{u'tweet': u"If you're male and own an iPhone, get new star soccer. Holy shit it's addictive", u'loc': u"US", u'_id': ObjectId('515ecace4e18187ca67ddfcb'), u'time': datetime.datetime(2013, 4, 5, 12, 59, 57)}

выше одна строка сообщения с местоположением, и в моей базе данных могут быть US, SG, AU и т. д.... разные местоположения будут иметь разное количество сообщений. Как я могу запросить или это какой-либо возможный подход? Спасибо

ОБНОВЛЕНИЕ

Причина, по которой я хочу получить подсчет, заключается в том, что мне нужно ввести данные в следующий код для диаграмма Google сгенерирует диаграмму для меня.

var data = google.visualization.arrayToDataTable([
      ['Country', 'Popularity'],
      ['Germany', 200],
      ['United States', 300],
      ['Brazil', 400],
      ['Canada', 500],
      ['France', 600],
      ['RU', 700]
    ]);

person 1myb    schedule 05.04.2013    source источник
comment
docs.mongodb.org/manual/reference/aggregation/group   -  person dm03514    schedule 05.04.2013


Ответы (2)


Используйте структуру агрегации.

db.collection.aggregate({$group:{_id:"$loc", count: {$sum:1}}}

Это вернет вам для каждой страны, сколько раз она была упомянута.

person Asya Kamsky    schedule 05.04.2013

Мой первый порыв — сгруппировать записи в словарь, когда вы читаете курсор MongoClient. Каждый ключ будет страной, а каждое значение будет списком всех записей для этой страны.

import pymongo
con = pymongo.MongoClient()
db = con.myDatabase
col = db.myCollection
cursor = col.find()

data = {}
for c in cursor:
    if not c["loc"] in data.keys():
        data[c["loc"]] = []
    data[c["name"]].append(c)

Это, конечно, предполагает, что каждая запись имеет ключ «loc» из вашего примера.

person ccray    schedule 05.04.2013
comment
Кроме того, len(data[key]) даст вам счет для любой страны. - person ccray; 05.04.2013
comment
Спасибо за отличный ответ. с вашим методом, чтобы получить счет, можно ли опубликовать в javascript? Пожалуйста, проверьте обновление. Спасибо - person 1myb; 05.04.2013
comment
зачем вам выполнять работу в клиенте, если вы можете просто запросить у сервера базы данных совокупный подсчет по местоположению? - person Asya Kamsky; 05.04.2013