2

我正在使用 PyMongo 并且有一个包含大约 500 万个条目的集合。每个条目都有一个国家代码字段。

获得如下统计数据的最优雅的方式(以及最佳性能?)是什么:

US - 302000
CA - 180000
IN - 160000
DE - 125000
...

MongoDB 是否有一种特殊的查询,或者我应该使用普通的 Python 字典在循环中进行查询?

编辑:条目示例:

update(
    {"id": user["id"]},
    {"$set": {
        ... some other fields
        "_country_code": "US",
        "_last_db_update": datetime.datetime.utcnow()}
    }, upsert=True)
4

1 回答 1

3

看起来这是mongodb 聚合框架的任务:

db.collection.aggregate([{$group: {_id: "$_country_code", count: {$sum: 1}}}])

将产生如下结果:

{
    "result" : [
        {
            "_id" : "US",
            "count" : 302000
        },
        {
            "_id" : "CA",
            "count" : 180000
        },
        ...
    ],
    "ok" : 1
}

使用 pymongo 的相同查询:

db.command('aggregate', 'collection', pipeline=[{"$group": {"_id": "$_country_code", "count": {"$sum": 1}}}])

希望有帮助。

于 2013-06-28T08:36:01.160 回答