map reduce统计文档的函数-mongodb

map reduce统计文档的函数-mongodb,mongodb,Mongodb,我有一个包含以下字段的集合: TestTable { "ID" "Name" "Ver" "Serial" "DateTime" "FeatureID" "FeatureName" } 我希望有一个map reduce函数来获取特定年份的记录数。 我编写的map reduce函数是: map= function(){ year= Date.UTC(this.DateTime

我有一个包含以下字段的集合:

TestTable
{
        "ID"
        "Name"
        "Ver" 
        "Serial"
        "DateTime"
        "FeatureID"
        "FeatureName"
}
我希望有一个map reduce函数来获取特定年份的记录数。 我编写的map reduce函数是:

map= function(){
    year= Date.UTC(this.DateTime.getFullYear());
    emit({year: year}, {count: 1});
}

reduce= function(key, values){
    var count=0;
    for(v in values){
        count+= v['count'];
    });
    return {count: count};
}
现在,输出应该给出每年的倍增数。map reduce功能正确吗

我得到的结果是:

> db.Years.find()
{ "_id" : { "year" : NaN }, "value" : { "count" : NaN } }
> db.Years.find().count()
1
这不是我所期望的

已编辑

TestTable文档之一:

> db.TestTable.findOne()
{
        "_id" : ObjectId("527c48e99000cf10bc2a1d82"),
        "ID" : "LogID16587",
        "Name" : "LogName15247",
        "Ver" : "VersionID11",
        "Serial" : "ProductID727",
        "DateTime" : ISODate("1998-12-15T18:30:00Z"),
        "FeatureID" : "FeatureID465",
        "FeatureName" : "FeatureName 1460"
}
提前感谢。

需要年份和月份参数。因此,您的
map
函数应该如下所示:

map=function(){
年份=Date.UTC(this.DateTime.getFullYear(),0);
发射({year:year},{count:1});
}
另外,不要在
reduce
方法中使用
in
迭代数组元素,因为它与您使用它的方式不一样。改用传统的
for
循环:

reduce=函数(键、值){
var计数=0;

for(var i=0;iThanks for the reply。如果我想获得每年、每月和每天的文档数,我应该如何更改函数?@user2439903您应该将其作为一个单独的问题发布。