繁体   English   中英

MongoDB与PHP聚合 - 按日期分组

[英]MongoDB aggregate with PHP - group by on date

我在MongoDB使用PHP aggregate 代码如下:

$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然后$dayOfYear ......我需要它是日期升序。 所以,基本上不是简单地做$dayOfYear我需要像$year-$month-$dayOfMonth $dayOfYear这样的东西。

不幸的是,这不起作用。 有任何想法吗?

谢谢。

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

$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

您不应该对整个_id排序,因为您已将其设置为包含一个对象(可以奇怪地排序),因此请将$sort更改为此类,而不是按年份特别排序:

  '$sort' => array(
      '_id.day' => 1
  ),

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM