如何解决使用一个MongoDB group查询对每月的每一天进行汇总
|| 我创建了一个MongoDB聚合查询,该查询将为我提供当月的数据总和,但是如何修改此数据,以便它将返回该月的每一天的数组,以及每一天的总数(我假设这是可行的,但我发现很难使其正常运行吗?如果这不可能,那么有没有比使用循环并运行30个组查询更好的方法了? 我正在使用PHP驱动程序,但是在shell中回答同样有用。$total_this_month = $db->test->group(
array( ),array(
\'sum\' => 0
),new MongoCode( \'function(doc,out){ out.sum += doc.data; }\' ),array(
\'condition\' => array(
\'time\' => array(
\'$gte\' => new MongoDate(strtotime(\'first day of this month,00:00:00\')),\'$lte\' => new MongoDate(strtotime(\'last day of this month,23:59:59\'))
)
)
)
);
解决方法
如果您计划运行组查询,则通常应考虑添加一个或多个新字段,以使您可以根据需要的时间段进行分组。如果这是不需要性能调整的即席查询,那么使用map-reduce的先前答案是一个很好的答案。例如,我有一个集合,有时需要按天,周,月等进行汇总。这是一个示例记录:
{\"_id\" : ObjectId(\"4ddaed3a8b0f766963000003\"),\"name\": \"Sample Data\",\"time\" : \"Mon May 23 2011 17:26:50 GMT-0600 (MDT)\",\"period\" : {
\"m\" : 201105,\"w\" : 201121,\"d\" : 20110523,\"h\" : 2011052317
}
}
使用这些附加字段,我可以使用group函数做更多的事情,还可以为这些字段建立索引以进行更快的查询。您可以选择使用整数,也可以使用字符串,也可以使用字符串-两种方法都可以,但是请记住,您的查询参数必须具有相同的数据类型。我喜欢整数,因为它们似乎应该表现得更好,并且使用更少的空间(预感)。
, group命令不支持通过函数生成新的分组键,因此请使用map / reduce而不是group。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。