我正在使用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]
]);
答案 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”键。