我在aggregate
MongoDB
使用了PHP
。代码如下:
$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
这样的东西。
不幸的是,这不起作用。有什么想法吗?
感谢。
答案 0 :(得分:3)
您可以将这些部分投影出来,然后对它们进行分组,以便您对整个日期进行分组:
$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
。
答案 1 :(得分:0)
您不应该对整个_id
进行排序,因为您已将其设置为包含一个对象(可以奇怪地排序),因此请将$sort
更改为此而不是按日排序年份:
'$sort' => array(
'_id.day' => 1
),