mongodb 在slave中统计数据,然后保存到master的表中的javascript脚本代码

需求是这样的,我需要统计slave中的前一天的数据,然后将这些数据存入master的表中(要考虑到slave不能写的限制)。

mongo 192.168.1.48:27017/l_comment;
var map = function() {
    var date = new Date();
        date.setDate(date.getDate() - 1);
        var d = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
              emit({rootId:this.rootId,date:d,type:parseInt(this.type)},
                    { 
sum:1,
status:this.status,boardId:this.boardId,
       currBoardId:this.currBoardId,reblogNum:0,likeNum:0,replyNum:0});
                    };
var reduce = function(key, values){
var reblogNum = 0;
var likeNum=0; 
var replyNum=0;
var sum = 0;
var type = key.type;
        var date = new Date();
        date.setDate(date.getDate() - 1);
        var d = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
for(var i=0;i < values.length;i++) 
 {
 var val = values[i];
                  reblogNum += val.reblogNum;
                  likeNum += val.likeNum; replyNum += val.replyNum;
 var status=parseInt(val.status);
 var boardId= val.boardId;
 var currBoardId =  val.currBoardId;
 if(status==11 && currBoardId > 0) {
    reblogNum = reblogNum + 1;
  } else if(status==12 && currBoardId > 0) {
       likeNum = likeNum + 1;
  } else if(status ==0 && boardId > 0) {
    replyNum= replyNum + 1;
 }
 }
 sum =reblogNum + replyNum + likeNum;
 return {sum:NumberInt(sum),reblogNum:NumberInt(reblogNum),replyNum:NumberInt(replyNum),likeNum:NumberInt(likeNum)};
};


var prevous = function() {
   var date = new Date();
   date.setDate(date.getDate() - 2);
   return (date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate() + ' 23:59:59');
};
var after = function() {
    var date = new Date();
   date.setDate(date.getDate());
   return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
};
var data = db.comment.mapReduce(
    map,
    reduce,    
   {
    query : {
        createTime:{$gt:prevous(),$lt:after()}
    },
    out:{inline:1}
   }
);
var mydb = connect('192.168.1.48:27017/l_comment');
var results = data.results;
for (var i = 0; i < results.length; i++) {
   var obj = results[i];
   var rootId = obj._id.rootId;
   var date = obj._id.date;
   var type = obj._id.type;
   var _id = obj._id;
   var sum = obj.value.sum;
   mydb.comm_day_num.insert({'_id':{rootId:rootId,date:date},rootId:rootId,type:type,sum:sum,date:date});
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值