如何用PyMongo按日期分组统计MongoDB中唯一orderid数量?
正确实现方法
你的代码错误在于混淆了MongoDB聚合操作符和Python语法,不能在聚合管道中直接调用Python的.distinct()方法。要实现按日期分组统计唯一orderid数量,需要使用MongoDB聚合框架的$addToSet和$size操作符,具体实现如下:
完整PyMongo代码
from pymongo import MongoClient # 连接MongoDB client = MongoClient('mongodb://localhost:27017/') db = client['your_database_name'] collection = db['your_collection_name'] # 聚合操作 agg_result = collection.aggregate([ { "$group": { "_id": "$date", "count_orderid": { "$size": { "$addToSet": "$orderid" } } } }, { "$project": { "_id": 0, "date": "$_id", "count_orderid": 1 } } ]) # 转换为列表查看结果 result_list = list(agg_result) print(result_list)
代码解释
$group阶段:
- 按
date字段分组(_id: "$date") - 使用
$addToSet将每个分组内的orderid去重后存入数组,再通过$size获取该数组的长度,得到唯一orderid的数量,命名为count_orderid
- 按
$project阶段:
- 移除默认的
_id字段(_id: 0) - 将分组的
_id(即日期)重命名为date字段,保留count_orderid字段,让输出格式与预期完全匹配
- 移除默认的
执行后会得到你想要的结果:
[{'date': '01-01-2022', 'count_orderid': 2}, {'date': '02-01-2022', 'count_orderid': 3}, {'date': '03-01-2022', 'count_orderid': 2}]
内容的提问来源于stack exchange,提问作者Pooja Bhateley
相关产品推荐
相关产品推荐

