- $match 即 sql 中的 where 条件,查询符合条件的记录。
- $project 处理字段值,即从现在表中(collection)中字段选取你想要的字段,给他们起别名,当然可以包含一些处理,比如日期转换,计算等。
- $group sql 中的 group by, 使用 project 中的 field(刚在 project 中被处理过的),作进一步处理,比如 sum
- $sort 排序。也要用到 project 处理后的 field。
这几个部分可以单独 run, 可以试试,比如只写 project
1. $project 示例
吐槽:
a. 这个名字起的的, project - 这就让你很难望文生义,比如有个东西叫 zookeeper,这名字多好,动物园管理员,管大象的,管动物的,多带感。这里的 project 就莫名其妙。
b.当原字段名用$开头,dateToString, date 之类的操作也用 $ 开头,就比较蛋疼,很难分清哪个是操作,哪个是字段。
2. 完整的 group by count 示例
按月统计订单数
输出:
<class 'str'> 2022-10 1
<class 'str'> 2022-11 1
<class 'str'> 2022-12 1
<class 'str'> 2023-10 1
<class 'str'> 2023-11 1
<class 'str'> 2023-12 1
3. group by + 百分比
$addFields
输出示例:
{'_id': 'pa_96rmkslq', 'count': 7, 'percentage': 100.0}
我觉得我说的挺清楚的,结构搞清楚,细节查官方文档就好。
如果你也觉得说得清楚,请不吝点赞。
代码是 python, pymongo, 操作 mongodb。