mongoDB 按照时间字段分组 【24小时,周,月,年】

最近在做mongoDB的统计, 有需求是

按照一天24小时分组,

按照一周的7天分组, 

按照一个月30天分组,

按照一年12个月分组统计,

mongodb 入库的时间字段是 2016-12-12 这样的字符串格式,并没有用mongodb的格式UTC,有时差问题. 

思路是,只能通过mongodb的 管道 进行层层筛选, 分组的时候使用mongodb的自带函数,$substr 进行截取进行分组.

db.advPlaysDetails.aggregate([  
    {  
        $match: {advId:"1"}  
    },  
    {  
        $match: {playTime:{$gt: "2016-11-29",$lt:"2016-11-31"  }}  
    },  
    {  
        $project :{new_time_stamp :{$substr :["$playTime",11,2]},"_id":0,playTimes:1,}  
          
    },  
    {  
      $group : {_id :"$new_time_stamp", playTimes : {$sum : "$playTimes"}}  
      
    }  
      
 ])

$substr 第一个参数 要切割的字段, 第二个参数:从第几个字段开始切, 第三个字段:切几个.

至于统计出来, 比如,一周里,可能有一两天根本就没有数据这种情况,可以实现弄一个7天的集合或者数组,里边数据默认为0 或其他初始值. 至于一个月多少天,不能定死30,应该用Calendar自己去算.



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值