mongodb 日期分组聚合,MongoDB与PHP聚合-按日期分组

I am using an aggregate in MongoDB with PHP. The code looks like:

$results = $c->aggregate(array(

array(

'$project' => array(

'day' => array('$dayOfYear' => '$executed')

),

),

array(

'$group' => array(

'_id' => array('day' => '$day'),

'count' => array('$sum' => 1)

),

),

array(

'$sort' => array(

'_id' => 1

),

),

array(

'$limit' => 30

)

));

The problem with this, is that $dayOfYear does not sort correctly, because it sorts 2 then 3 then 345, 346... I need it to be date ascending. So, basically instead of simply doing $dayOfYear I need something like $year-$month-$dayOfMonth.

Unfortunately this does not work. Any ideas?

Thanks.

解决方案

You can project those parts out and then group on them to enable you to group on the whole date:

$results = $c->aggregate(array(

array(

'$project' => array(

'year' => array('$year' => '$executed' ),

'month' => array('$month' => '$executed' ),

'day' => array('$dayOfMonth' => '$executed')

),

),

array(

'$group' => array(

'_id' => array('year' => '$year', 'month' => '$month', 'day' => '$day'),

'count' => array('$sum' => 1)

),

),

array(

'$sort' => array(

'_id.year' => 1,

'_id.month' => 1,

'_id.day' => 1

),

),

array(

'$limit' => 30

)

));

Something like that should do the trick allowing you to sort on, as you stated: $year-$month-$dayOfMonth.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值