/**auother : zhz
* mongodb :分组求和
* array:
* 控制的显示列$project,筛选条件 $match ,排序 $sort,分组key $group:_id ,求和值 $sum($max,$avg,$min等)
* */
HelperMongo.prototype.mGgruopAndsum = function(collectionName, array,callback) {
var self = this;
var reqId = _reqId++;
_log(reqId,"开始查找数量... "+collectionName+","+JSON.stringify(array));
function process(callback) {
_getCollection(self, collectionName, function (collection) {
collection.aggregate(array,function(error,rst){
if (error) {
global.err(collectionName + " : " + JSON.stringify(error));
return;
}
_log(reqId, "查找成功--> " + JSON.stringify(rst));
if(callback != undefined) callback(rst);
});
});
}
return _judgePromise(process,callback);
};
function _judgePromise(process,callback){
if(callback==undefined){
return new global.Promise(function(resolve, reject) {
process(resolve);
});
}else{
process(callback);
}
}
//获得排名信息
function _get_rank_list(callback){
constructcommon_exports._get_curr_constructid(function(res) {
constructid = res.constructid;
app.mgCross.mGgruopAndsum(playerRecord.NAME,[
{ $project : { //供使用的列
constructid : 1,
self_gpid : 1,
is_victory : 1,
stars : 1,
remain_time : 1,
end_time : 1,
curr_ispasslevel : 1,
curr_match : 1
}
},
{ $match : { //筛选条件
constructid : constructid
// is_victory : {"$ne":-1} //没结算的战斗不计入排行
}
},
{ $group : {
_id : { self_gpid:"$self_gpid",curr_match:"$curr_match"}, //分组"$self_gpid"
curr_levelcounts : { $sum : "$curr_ispasslevel" }, //运算
is_victory : { $sum : "$is_victory" },
stars : { $sum : "$stars" },
remain_time : { $sum : "$remain_time" },
end_time : { $max : "$end_time"}
}
}
],function(recordlist){
if(recordlist.length == 0){
var msg = {};
msg.rankinfo ={};
console.error("没有排行榜数据");
send(msg);
}
var lable = exUtil.timeUnix();
var array = [];
for(var i = 0;i<recordlist.length;i++){
var doc = {};
var tar_gpid_temp = recordlist[i]._id["self_gpid"];
var tar_gpsid = tar_gpid_temp.split("-");
var tar_gsid = tar_gpsid[0];
var tar_pid = tar_gpsid[1];
doc.constructid = constructid;
doc.gsid = tar_gsid;
doc.pid = tar_pid;
doc.curr_rank = lable;
doc.level = (recordlist[i].curr_levelcounts) / 3 ;
doc.victory = recordlist[i].is_victory;
doc.star = recordlist[i].stars;
doc.fighttime = recordlist[i].remain_time;
doc.overtime = recordlist[i].end_time;
doc.rankingAwards = "";
doc.isGetRankingAwards = 0;
array.push(doc);
}
app.mgCross.mgInsert(trank.NAME,array,function(res){ //批量插入
callback(constructid,lable);
});
});
});
}