在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/ 查看,简单介绍一个
上面代码执行的结果如下
得到的结果如下
查看文档,除了使用$dateToString
指令还可以使用$dayOfMonth
指令
所以需要根据需求灵活的使用各种指令。
