我在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但是没有一个可以按开始日期分组, 请帮忙。
答案 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然后执行迭代,找到日期范围内的每个文档并平均它的数字......
没有退出我希望如何解决这个问题,但它运作正常。