【问题标题】:get the count and group them获取计数并将它们分组
【发布时间】:2013-03-27 22:37:11
【问题描述】:

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

上面是一行带有位置的消息,在我的数据库中可能有美国、新加坡、澳大利亚等...不同的位置会有不同的消息数量。我该如何查询或者这是任何可能的方法?谢谢

更新

我想要获得计数的原因是因为我需要将数据注入到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]
    ]);

【问题讨论】:

标签: javascript python mongodb python-2.7 pymongo


【解决方案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”键。

【讨论】:

  • 另外,len(data["key"]) 将为您提供任何国家/地区的计数。
  • 感谢您的出色回复。用你的方法来获得计数,是否可以发布到 javascript?请检查更新。谢谢
  • 当您可以按位置查询数据库服务器的聚合计数时,为什么还要在客户端中完成这项工作?
【解决方案2】:

使用聚合框架。

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

这将为您返回每个国家/地区被提及的次数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多