[英]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.