MongoDB与PHP聚合-按日期分组 [英] MongoDB aggregate with PHP - group by on date

查看:219
本文介绍了MongoDB与PHP聚合-按日期分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在MongoDBPHP中使用aggregate.代码如下:

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
    )
));

此问题是$dayOfYear排序不正确,因为它先排序2,然后3,然后是345、346 ...我需要将它升序.因此,基本上我不需要简单地执行$dayOfYear,而是需要类似$year-$month-$dayOfMonth的东西.

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?

谢谢.

推荐答案

您可以将这些部分投影出来,然后对它们进行分组,以使您可以对整个日期进行分组:

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
    )
));

类似的事情应该可以解决,如您所说:$year-$month-$dayOfMonth.

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

这篇关于MongoDB与PHP聚合-按日期分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆