使用一个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。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...