按日期分组范围mongodb

时间:2014-11-07 07:38:02

标签: mongodb mapreduce mongoose mongodb-query aggregation-framework

我在db

中有这个集合
[{name:1,startDate:1/1/13,endDate:2/2/13,number:10},
{name:1,startDate:2/2/13,endDate:5/2/13,number:15},
{name:2,startDate:2/1/13,endDate:5/2/13,number:25},
{name:1,startDate:5/2/13,number:17},
{name:2,startDate:5/2/13,number:30}]

我想获得一个开始日期列表,其中包含此开始日期范围内的平均值,例如,此集合的结果将是:

{date:1/1/13,avg:10},
{date:2/1/13,avg:17.5},
{date:2/2/13,avg:20},
{date:5/2/13,avg:23.5}

我尝试了一些map-reduce和group但是没有一个可以按开始日期分组, 请帮忙。

2 个答案:

答案 0 :(得分:0)

您可以使用聚合pipleline:

来完成此操作

db.collectionName.aggregate([{$组:{_ ID:' $的startDate',AVG:{$平均:' $数'}}}])

这将按startDate对集合进行分组,聚合是数字的平均值。

如果您严格要求_id字段标记为startDate,则在管道中使用$ project操作:

db.collectionName.aggregate([{$ group:{_ id:' $ startDate',avg:{$ avg:' $ number'}}},{$ project: {'的startDate':' $ _ ID''平均':' $平均',_ ID:0}}])

这将产生预期的结果。

答案 1 :(得分:0)

由于缺乏更好的方法,我只是从服务器端做到了,

首先获取所有startDate然后执行迭代,找到日期范围内的每个文档并平均它的数字......

没有退出我希望如何解决这个问题,但它运作正常。

相关问题