按日期分组mongoDB

按日期分组mongoDB,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我在mongoDB中有一组数据,我必须按照$timestamp对这些数据进行汇总。此字段包含日期,但格式为字符串(上面的示例数据) 如何将$timestamp转换为日期,以便将它们组合在一起 接下来,我必须对每个日期和iden的每个分数进行汇总,对每个分数进行汇总 示例数据: [ { _id: "1442", timestamp: "2016-03-15T22:24:02.000Z", iden: "15", scores_

我在mongoDB中有一组数据,我必须按照
$timestamp
对这些数据进行汇总。此字段包含日期,但格式为字符串(上面的示例数据)

如何将
$timestamp
转换为日期,以便将它们组合在一起

接下来,我必须对每个日期和iden的每个
分数进行汇总,对每个
分数进行汇总

示例数据:

[
    {
        _id: "1442",
        timestamp: "2016-03-15T22:24:02.000Z",
        iden: "15",
        scores_today: "0.000000",
        scores_total: "52337.000000"
    }
]
我的代码

var project = {
            "$project":{ 
                "_id": 0,
                "y": {
                    "$year": "$timestamp"      // tried this way, not working
                    },
                "m": {
                    "$month": new Date("$timestamp") // tried either this, not working
                }, 
                "d": {
                    "$dayOfMonth":  new Date("$timestamp")
                },
                "iden" : "$iden"
            } 
        },
        group = {   
            "$group": { 
                "_id": { 
                    "iden" : "$iden",
                    "year": "$y", 
                    "month": "$m", 
                    "day": "$d"
                },  
                "count" : { "$sum" : "$scores_today" }
            }
        };
        mongoDB.collection('raw').aggregate([ project, group ]).toArray()....
这是node.js服务记录的错误

错误:{[MongoError:异常:无法将BSON类型字符串转换为 日期]名称:“MongoError”,消息:“异常:无法从转换” BSON类型字符串到日期',errmsg:'异常:无法从转换 BSON类型字符串“截止日期”,代码:16006,确定:0}


您可以使用
ISODate($timestamp)
从字符串构造日期对象

更新

如果您没有运行MongoDb shell,那么就不能直接使用ISODate。在这种情况下,请尝试调用eval命令

var aggregationResult=mongoDB.eval(
'
'function()                                                                                '+
'{                                                                                         '+
'  var project = {                                                                         '+
'              "$project":{                                                                '+ 
'                  "_id": 0,                                                               '+
'                  "y": {                                                                  '+
'                      "$year": ISODate("$timestamp").getFullYear()                        '+
'                      },                                                                  '+
'                  "m": {                                                                  '+
'                      "$month": ISODate("$timestamp").getMonth()+1 // months start from 0 '+
'                  },                                                                      '+
'                  "d": {                                                                  '+
'                      "$dayOfMonth":  ISODate("$timestamp").getDate()                     '+
'                  },                                                                      '+
'                  "iden" : "$iden"                                                        '+
'              }                                                                           '+
'          },                                                                              '+
'          group = {                                                                       '+
'              "$group": {                                                                 '+
'                  "_id": {                                                                '+
'                      "iden" : "$iden",                                                   '+
'                      "year": "$y",                                                       '+
'                      "month": "$m",                                                      '+
'                      "day": "$d"                                                         '+
'                  },                                                                      '+
'                  "count" : { "$sum" : "$scores_today" }                                  '+
'              }                                                                           '+
'          };  
'    var result=db.raw.aggregate([ project, group ]);                  '+
'    return result;                                                                        '+        
'  }                                                                                       '+
'
);

它告诉我这个
ReferenceError:ISODate未定义
@a.ndrea,如果您只在mongo CLI中键入
ISODate()您将看到什么结果?@a.ndrea好的,请尝试将“$timestamp”放在引号中。我无法访问mongo CLI,它不在我的电脑上,我无法访问它。甚至尝试了“$timestamp”,仍然是相同的错误,ISODate未定义OK,您使用的是什么客户端?如果它不是mongo CLI,则不能按原样在代码中使用它的函数,必须将它们传递给mongo,以便在聚合运行时调用它们。我想,您只需要在eval()中传递所有聚合脚本就可以做到这一点。
var aggregationResult=mongoDB.eval(
'
'function()                                                                                '+
'{                                                                                         '+
'  var project = {                                                                         '+
'              "$project":{                                                                '+ 
'                  "_id": 0,                                                               '+
'                  "y": {                                                                  '+
'                      "$year": ISODate("$timestamp").getFullYear()                        '+
'                      },                                                                  '+
'                  "m": {                                                                  '+
'                      "$month": ISODate("$timestamp").getMonth()+1 // months start from 0 '+
'                  },                                                                      '+
'                  "d": {                                                                  '+
'                      "$dayOfMonth":  ISODate("$timestamp").getDate()                     '+
'                  },                                                                      '+
'                  "iden" : "$iden"                                                        '+
'              }                                                                           '+
'          },                                                                              '+
'          group = {                                                                       '+
'              "$group": {                                                                 '+
'                  "_id": {                                                                '+
'                      "iden" : "$iden",                                                   '+
'                      "year": "$y",                                                       '+
'                      "month": "$m",                                                      '+
'                      "day": "$d"                                                         '+
'                  },                                                                      '+
'                  "count" : { "$sum" : "$scores_today" }                                  '+
'              }                                                                           '+
'          };  
'    var result=db.raw.aggregate([ project, group ]);                  '+
'    return result;                                                                        '+        
'  }                                                                                       '+
'
);