2013-04-05 88 views
1

我使用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)} 

以上是与位置信息的一行,并在我的数据库可能有美国,SG,AU等等...不同的位置会有不同的邮件数量。我如何查询或是任何可能的方法?由于

UPDATE

我想计数的原因是因为我需要将数据注入到下面的代码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] 
    ]); 
+0

http://docs.mongodb.org/manual/reference/aggregation/group/ – dm03514 2013-04-05 13:30:49

回答

2

使用聚合框架。

db.collection.aggregate({$group:{_id:"$loc", count: {$sum: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”键。

+0

另外,len(data [“key”])会让你的计数为任何国家。 – ccray 2013-04-05 13:40:17

+0

感谢您的回应。用你的方法来计算,是否可以发布到JavaScript?请检查更新。谢谢 – 1myb 2013-04-05 14:44:35

+0

为什么要在客户端上完成这项工作,只需要按位置查询数据库服务器的总计数? – 2013-04-05 15:45:48

相关问题