得到计数并将它们分组

时间:2013-04-05 13:25:57

标签: javascript python mongodb python-2.7 pymongo

我正在使用python和pymongo。

在其中一个mongo集合中保存来自不同国家/地区的不同消息。 每份文件都有一个国家的短代码来表明他们的国家。 我可以知道如何将它们分组并计算每个国家/地区的代码?

例如

{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 chart generate the chart的以下代码数据。

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

2 个答案:

答案 0 :(得分:2)

使用聚合框架。

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

这会让你回到每个国家/地区的时间。

答案 1 :(得分:1)

我的第一直觉是在读取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”键。