日期范围内MongoDB集合中的事件计数(按天)

日期范围内MongoDB集合中的事件计数(按天),mongodb,mapreduce,aggregation-framework,Mongodb,Mapreduce,Aggregation Framework,我试图弄清楚如何按指定日期范围内发生的所有日期对MongoDB集合中的事件进行计数 MongoDB中的示例文档架构: { eventNum:1234, 起始日期:ISODate(“2014-01-01”), 结束日期:ISO日期(“2014-01-04”) 事件类型:系统崩溃 } { eventNum:4567, 起始日期:ISODate(“2014-01-04”), 结束日期:ISODate(“2014-01-05”) 事件类型:维护 } 我想了解的是日期范围: 2014年1月1日-2014

我试图弄清楚如何按指定日期范围内发生的所有日期对MongoDB集合中的事件进行计数

MongoDB中的示例文档架构:

{
eventNum:1234,
起始日期:ISODate(“2014-01-01”),
结束日期:ISO日期(“2014-01-04”)
事件类型:系统崩溃
}
{
eventNum:4567,
起始日期:ISODate(“2014-01-04”),
结束日期:ISODate(“2014-01-05”)
事件类型:维护
}
我想了解的是日期范围:

2014年1月1日-2014年6月1日
在此范围内每天的事件总数是多少

结果将是:

2014年1月1日:1
1/2/2014: 1
1/3/2014: 1
1/4/2014: 2
1/5/2014: 1
1/6/2014: 0
我的问题实际上在于,所跟踪的数据不是以单个日期为基础的,这将允许我按日期执行基本聚合。事件有开始和结束日期

不幸的是,这是一个更大的问题,否则您将无法发出执行此操作所需的日期

db.events.mapReduce(
函数(){
var One Day=(1000*60*60*24),
start=this.startDate.valueOf()
-(this.startDate.valueOf()%oneDay),
end=((this.endDate.valueOf())
-(this.endDate.valueOf()%oneDay))+oneDay);
对于(var日=开始;日<结束;日+=一天){
发出(新日期(天),1);
}
},
功能(键、值){
返回Array.sum(值);
},
{ 
“查询”:{
“起始日期”:{“$gte”:新日期(“2014-01-01”),
“结束日期”:{“$lt”:新日期(“2014-01-06”)}
},
“out”:{“inline”:1}
}
)
如果确实需要日期范围内不存在的事件的零值,可以稍微更改:

db.events.mapReduce(
函数(){
var One Day=(1000*60*60*24),
start=this.startDate.valueOf()
-(this.startDate.valueOf()%oneDay),
end=((this.endDate.valueOf())
-(this.endDate.valueOf()%oneDay))+oneDay);
对于(var日=开始;日<结束;日+=一天){
发出(新日期(天),1);
}
对于(var day=end;day来说,不幸的是,这是一个更大的问题,否则您将无法发出执行此操作所需的日期

db.events.mapReduce(
函数(){
var One Day=(1000*60*60*24),
start=this.startDate.valueOf()
-(this.startDate.valueOf()%oneDay),
end=((this.endDate.valueOf())
-(this.endDate.valueOf()%oneDay))+oneDay);
对于(var日=开始;日<结束;日+=一天){
发出(新日期(天),1);
}
},
功能(键、值){
返回Array.sum(值);
},
{ 
“查询”:{
“起始日期”:{“$gte”:新日期(“2014-01-01”),
“结束日期”:{“$lt”:新日期(“2014-01-06”)}
},
“out”:{“inline”:1}
}
)
如果确实需要日期范围内不存在的事件的零值,可以稍微更改:

db.events.mapReduce(
函数(){
var One Day=(1000*60*60*24),
start=this.startDate.valueOf()
-(this.startDate.valueOf()%oneDay),
end=((this.endDate.valueOf())
-(this.endDate.valueOf()%oneDay))+oneDay);
对于(var日=开始;日<结束;日+=一天){
发出(新日期(天),1);
}
对于(var day=end;day来说,不幸的是,这是一个更大的问题,否则您将无法发出执行此操作所需的日期

db.events.mapReduce(
函数(){
var One Day=(1000*60*60*24),
start=this.startDate.valueOf()
-(this.startDate.valueOf()%oneDay),
end=((this.endDate.valueOf())
-(this.endDate.valueOf()%oneDay))+oneDay);
对于(var日=开始;日<结束;日+=一天){
发出(新日期(天),1);
}
},
功能(键、值){
返回Array.sum(值);
},
{ 
“查询”:{
“起始日期”:{“$gte”:新日期(“2014-01-01”),
“结束日期”:{“$lt”:新日期(“2014-01-06”)}
},
“out”:{“inline”:1}
}
)
如果确实需要日期范围内不存在的事件的零值,可以稍微更改:

db.events.mapReduce(
函数(){
var One Day=(1000*60*60*24),
start=this.startDate.valueOf()
-(this.startDate.valueOf()%oneDay),
end=((this.endDate.valueOf())
-(this.endDate.valueOf()%oneDay))+oneDay);
对于(var日=开始;日<结束;日+=一天){
发出(新日期(天),1);
}
对于(var day=end;day来说,不幸的是,这是一个更大的问题,否则您将无法发出执行此操作所需的日期

db.events.mapReduce(
函数(){
var One Day=(1000*60*60*24),
start=this.startDate.valueOf()
-(this.startDate.valueOf()%oneDay),
end=((this.endDate.valueOf())
-(this.endDate.valueOf()%oneDay))+oneDay);
对于(var日=开始;日<结束;日+=一天){
发出(新日期(天),1);
}
},
功能(键、值){
返回Array.sum(值);
},
{ 
“查询”:{
“起始日期”:{“$gte”:新日期(“2014-01-01”),
“结束日期”:{“$lt”:新日期(“2014-01-06”)}
},
“out”:{“inline”:1}
}
)
如果确实需要日期内不存在的事件的零值