Mongodb 一年的计数频率

Mongodb 一年的计数频率,mongodb,mapreduce,mongoid3,Mongodb,Mapreduce,Mongoid3,我试图用map/reduce计算一年中的频率,下面是代码 map = %Q{ function(){ var today = new Date() var age = today.getFullYear() - this.birthdate.getFullYear() var m = today.getMonth() - this.birthdate.getMonth() if (m < 0 || (m === 0 && today.ge

我试图用map/reduce计算一年中的频率,下面是代码

map = %Q{
  function(){
    var today = new Date()
    var age = today.getFullYear() - this.birthdate.getFullYear()
    var m = today.getMonth() - this.birthdate.getMonth()
    if (m < 0 || (m === 0 && today.getDate() < this.birthdate.getDate()))
        age--

    emit(age, { count: 1 })
  }
}
reduce = %Q{
  function(key, values){
    var sum = 0

    values.forEach( function(value){
      sum += value.count
    })

    return { count: sum }
  }
}

scoped.map_reduce(map, reduce).out(inline: true)
map=%Q{
函数(){
发射({},{
年份:this.birthdate.getFullYear(),
计数:1
})
}
}
减少=%Q{
功能(键、值){
var agg={}
values.forEach(函数(值){
如果(累计[价值年]){
agg[value.year]+=value.count
}否则{
agg[key]=value.count
}
})
返回agg
}
}
User.map\u reduce(map,reduce).out(内联:true)
它回来了

=> [{"_id"=>{}, "value"=>{"2004"=>2.0, "2002"=>1.0, "2005"=>1.0}}] 

但我的数据库里有很多年,这只是跟踪其中的3年。我该怎么做呢?

现在它可以工作了。。。这是密码

map = %Q{
  function(){
    var today = new Date()
    var age = today.getFullYear() - this.birthdate.getFullYear()
    var m = today.getMonth() - this.birthdate.getMonth()
    if (m < 0 || (m === 0 && today.getDate() < this.birthdate.getDate()))
        age--

    emit(age, { count: 1 })
  }
}
reduce = %Q{
  function(key, values){
    var sum = 0

    values.forEach( function(value){
      sum += value.count
    })

    return { count: sum }
  }
}

scoped.map_reduce(map, reduce).out(inline: true)
map=%Q{
函数(){
var today=新日期()
var age=today.getFullYear()-this.birthdate.getFullYear()
var m=today.getMonth()-this.birthdate.getMonth()
如果(m<0 | |(m==0&&today.getDate()
现在它可以工作了。。。这是密码

map = %Q{
  function(){
    var today = new Date()
    var age = today.getFullYear() - this.birthdate.getFullYear()
    var m = today.getMonth() - this.birthdate.getMonth()
    if (m < 0 || (m === 0 && today.getDate() < this.birthdate.getDate()))
        age--

    emit(age, { count: 1 })
  }
}
reduce = %Q{
  function(key, values){
    var sum = 0

    values.forEach( function(value){
      sum += value.count
    })

    return { count: sum }
  }
}

scoped.map_reduce(map, reduce).out(inline: true)
map=%Q{
函数(){
var today=新日期()
var age=today.getFullYear()-this.birthdate.getFullYear()
var m=today.getMonth()-this.birthdate.getMonth()
如果(m<0 | |(m==0&&today.getDate()
您也可以使用聚合框架来实现这一点。你的查询模式是什么?您可以插入并静态存储年份吗?您也可以使用聚合框架来实现这一点。你的查询模式是什么?你能把年份插入并静态存储吗?