【发布时间】:2017-07-02 15:19:15
【问题描述】:
我正在尝试输出一个按日期分组的日期数组,其中包含一个名为 minutes_numeric 的字段的总和。
我目前的查询是:
return $this->db->Work->aggregate(array(
array(
'$match' => array(
'date' => array('$gt' => $start, '$lt' => $end)
)
),
array(
'$project' => array(
'year' => array('$year' => '$date' ),
'month' => array('$month' => '$date' ),
'day' => array('$dayOfMonth' => '$date'),
),
),
array(
'$group' => array(
'_id' => array('year' => '$year', 'month' => '$month', 'day' => '$day'),
'minutes_numeric' => array('$sum' => 1)
),
),
array(
'$sort' => array(
'_id' => 1
),
),
array(
'$limit' => 30
)
));
哪些输出:
{
result: [
{
_id: {
year: 2013,
month: 12,
day: 4
},
minutes_numeric: 40
},
{
_id: {
year: 2013,
month: 12,
day: 11
},
minutes_numeric: 127
},
{
_id: {
year: 2013,
month: 12,
day: 12
},
minutes_numeric: 108
}
],
ok: 1
}
这很好,但是minutes_numeric 代表当天的行数,所以我更改了$group 子句:
array(
'$group' => array(
'_id' => array('year' => '$year', 'month' => '$month', 'day' => '$day'),
'minutes_numeric' => array('$sum' => '$minutes_numeric')
),
),
然后将总和 (minutes_numeric) 更改为 0,而不是实际总和。
我不确定为什么我的总和出错了,非常感谢任何帮助
编辑,
如果我更新 $project 以包含 minutes_numeric 那么总和似乎不包括 $match 参数
array(
'$project' => array(
'year' => array('$year' => '$date' ),
'month' => array('$month' => '$date' ),
'day' => array('$dayOfMonth' => '$date'),
'minutes_numeric' => 1
),
),
array(
'$group' => array(
'_id' => array('year' => '$year', 'month' => '$month', 'day' => '$day'),
'minutes_numeric' => array('$sum' => '$minutes_numeric')
),
)
【问题讨论】:
-
对不起,我不明白“总和似乎排除了 $match 参数”,这是什么意思?
-
您可以与我们分享您进行编辑后的结果吗?
-
请提供您收藏中的实际文件。我怀疑“minutes_numeric”不是一个简单的顶级字段。
标签: php mongodb aggregation-framework