问题描述
我正在MongoDB
和PHP
中使用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聚合-按日期分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!