【已解决】mongoose 日期聚合的问题
发布于 7个月前 作者 heixiaoshan 752 次浏览

##文档

{
   "_id": ObjectId("53c4190a4572483830000053"),
   "sendfrom": "joy",
   "sendto": "iphone",
   "sendtitle": "新趋势",
   "user": "han",
   "create_at": ISODate("2014-07-14T17: 53: 14.499Z") 
}

文档是这样的要我如何使用聚合函数Aggregation 根据日期来分组啊 请大神指导,指导。谢谢啦。

最后采用方式:

Sendinfo.getallday = function(user, callback) {
    var date = new Date();
    var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);
    var lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0);
    var group={
//      key: {user:1,create_at:1},
        keyf: function(sendinfos) {
                var date = new Date(sendinfos.create_at);
                var dateKey = (date.getMonth()+1)+"/"+date.getDate()+"/"+date.getFullYear()+'';
                return {'day':dateKey,'user':sendinfos.user};//返回值
                            
                },//格式化日期
        cond: {'user':user}, //查询条件         cond: {'user':user, 'create_at': { $gt:firstDay,$lt:lastDay}}, //查询条件
        initial: {count:0}, //初始值
        reduce: function(obj, prev) {prev.count++;},
        finalize:{}
    };
    SendinfoModel.collection.group(
        group.keyf,
        group.cond, //查询条件
        group.initial, //初始值
       group.reduce,
       group.finalize,
       true,//reduce
       function(err,sendinfos){
          if (err) {
                return callback(err);
              }
          console.log("new Date(1):"+new Date().setDate(1)+",new Date(31):"+new Date().setDate(31)+","+sendinfos);
          callback(null,sendinfos);
       }
    );
  
};

13 回复

我觉得是 mapreduce 利用 create_at 字段来做

function map(){

var date = this.create_at; var year = date.getUTCFullYear(); var month = date.getUTCMonth(); month = month + 1; var day = date.getUTCDate();

var dateStr  = year + "-" + month  + "-" + day;
emit(dateStr, this);

} function reduce(key, values){ return {date:key, values:values}; } db.xxx.mapReduce(map, reduce, {out:"xxx_map_reduce"})

我这里要求的好像是每天,每个用户的分组总数,用mapReduce,好像有些问题

@heixiaoshan Aggregation的本质就是map reduce看你自己的实际需求

@chloe 噢。感觉那个太高深了。目前吸收不了。哈哈。等以后再琢磨下。多谢啦

@chloe @heixiaoshan aggregation 是特定情况下的 mapreduce,当需求自定义程度高时,mapreduce 通用并易用得多。

@alsotang 牛哥,你们公司还招人不

@chloe ??一直招人啊,公司那么大…每时每刻都在找人…

@alsotang 嗯。有时间要好好理解理解mapreduce

@alsotang 好吧,应该是你们部门或者项目组

回到顶部