在mongodb中按天进行聚合查询
最近在写项目的时候遇到一个问题,使用mongodb记录了用例的执行结果,但是在时间的记录上使用的是date格式,现在有一个需求,以天为单位,统计一下每天成功的用例和失败的用例,说到统计,肯定是要用到聚合查询,但是如果以date格式的时间为group依据,那么等同于没有分组,因为在记录用例的时间几乎不可能同时,今天查阅了一下相关文档,可以使用mongodb的$dateToString
命令来完成这个需求
问题来源
假如我们以如下的数据
|
|
我的预期结果是
|
|
如果按照以前的聚合方式,通过$time
来分组,由于每个时间都不相同,所以这样的聚合就相当于没有聚合
|
|
得到的结果
|
|
可以看到,由于$time
上的时间,谁和谁都不一样,所以如果以$time为分组对象的话每个统计都是1。
问题的解决
在分组的时候有一个$dateToString
指令,可以将日期格式的值转化为字符串,比如这里因为需求是要以天为单位,所以我将其转为
%Y-%m-%d
的字符串格式,具体的$grouop
如下
|
|
$dateToString
的说明文档可以访问https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/ 查看,简单介绍一个
|
|
它需要四个参数,只有date参数是必须的,指定数据来源,format是转化的格式,timezone为时区,onNull是如果日期值不存在时返回的值。
|
|
上面代码执行的结果如下
|
|
这个看起来还不错,但是离我的目标还差一点,因为它还没有按照用例执行结果进行分组,再以天进行倒序排列
|
|
得到的结果如下
|
|
查看文档,除了使用$dateToString
指令还可以使用$dayOfMonth
指令
|
|
但是这个指令只能适用于单一月份,如果两个月就会有交集,如7月6号和6月6号的会聚合到一起 上面得到的结果是
|
|
所以需要根据需求灵活的使用各种指令。

- 文章标题: 在mongodb中按天进行聚合查询
- 本文链接: https://www.yangyanxing.com/article/aggregate-perday-mongodb.html
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。