按日期范围mongodb分组



我在数据库中有这个集合

[{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}

我试过一些地图缩减和分组,但没有人能正确地按开始日期分组,请帮忙。

您可以使用聚合pipleline:

db.collectionName.agregate([{$group:{_id:"$startDate",平均值:{$avg:"$number"}}])

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

如果您严格希望_id字段标记为startDate,那么可以在管道中使用$project操作:

db.collectionName.agregate([{$group:{_id:'$startDate',平均值:{$avg:'$number'}}}},{$project:{'startDate':'$_id','avg':'$savg',_id:0}])

这将产生所需的结果。

由于没有更好的方法,我只是从服务器端完成,

首先获取所有的startDate,然后预先形成一个迭代,找到日期范围内的每个文档,并对其数字求平均值。。。

没有放弃我所期望的解决方法,但它工作正常。

相关内容

  • 没有找到相关文章

最新更新