使用 PyMongo 执行 MongoDB 聚合查询

2023-04-15 00:00:00 查询 执行 聚合
  1. PyMongo 环境准备

首先需要安装 PyMongo,如果还没有安装的话,可以使用 pip 进行安装:

pip install pymongo

然后在 Python 脚本中导入 pymongo 模块:

import pymongo

在执行聚合查询前,需要先连接 MongoDB 数据库,以下是连接到本地 MongoDB 服务器的示例代码:

client = pymongo.MongoClient('mongodb://localhost:27017/')
db = client['mydb']

其中 'mongodb://localhost:27017/' 是 MongoDB 服务器的地址,'mydb' 是要连接的数据库名称,可以根据实际情况进行修改。

  1. 聚合查询示例

下面以一个示例来演示 MongoDB 聚合查询的使用。假设我们有一个名为 'orders' 的集合,其中每条记录表示一个订单,包含如下字段:

  • orderId:订单编号,字符串类型,并且是集合中的唯一标识。
  • product:商品名称,字符串类型。
  • price:商品价格,数值类型。
  • quantity:商品数量,数值类型。
  • date:订单日期,日期类型。

我们要执行的聚合查询是:统计每个商品的销售总数量和销售总金额,并按照销售总金额从高到低排序。

查询代码如下:

pipeline = [
    {'$group': {
        '_id': '$product',
        'total_qty': {'$sum': '$quantity'},
        'total_price': {'$sum': {'$multiply': ['$quantity', '$price']}}
    }},
    {'$sort': {'total_price': -1}},
]

result = db.orders.aggregate(pipeline)

for item in result:
    print(item)

上述代码中,聚合查询使用了 2 个阶段:

  • $group 阶段:根据 'product' 字段进行分组,统计每个商品的销售总数量和销售总金额,并使用 '_id' 字段保存分组的键值。
  • $sort 阶段:按照 'total_price' 字段进行降序排序。

最后的结果会以迭代器的方式返回,我们可以通过遍历迭代器来获取每个商品的销售统计结果,例如:

{'_id': '皮蛋编程', 'total_qty': 20, 'total_price': 2000}
{'_id': 'pidancode.com', 'total_qty': 10, 'total_price': 1000}

相关文章