[英]mongoDB PHP aggregate collection by date and sum field per date
我试图输出一个按日期分组的日期数组,其中包含一个名为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')
),
)
如果这是您当前的查询
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'),
'minutes_numeric' => 1
),
),
array(
'$group' => array(
'_id' => array('year' => '$year', 'month' => '$month', 'day' => '$day'),
'minutes_numeric' => array('$sum' => '$minutes_numeric')
),
),
array(
'$sort' => array(
'_id' => 1
),
),
array(
'$limit' => 30
)
));
那么$ match参数被“忽略”的唯一方法是结果不符合您的预期,可能是因为它们是错误的。 尝试检查$ start和$ end的值,因为您使用的查询似乎正确。
如果这不是问题,请使用当前查询的结果更新您的问题。 (如果查询与我的答案中的查询不同,也可以更新查询)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.