需求是这样的,我需要统计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});
}