ndoejs+mongodb 开发1:aggregate 分组求和
2017-08-21 11:18
369 查看
/**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); }); }); }); }
相关文章推荐
- ndoejs+mongodb 开发2:去重
- ndoejs+mongodb 开发3:count,统计条数
- ndoejs+mongodb 开发5:批量修改
- node.js mongodb aggregate 分组时时间差8小时的解决方案
- ndoejs+mongodb 开发4: 随机查询一条数据
- php7中使用mongoDB的聚合操作对数据进行分组求和统计操作
- nodejs+mongodb+linux开发环境配置
- nodejs + express + ejs + mongodb 一个非常简单的前后端开发的实例
- 零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
- Nodejs+Extjs+Mongodb开发第一天 Nodejs环境搭建
- 基于node.js+Express.js+Jade+MongoDB开发Web即时聊天系统
- nodejs + express + ejs + mongodb 一个非常简单的前后端开发的实例3
- Node.js开发入门—用MongoDB改造LoginDemo
- Node.js+MongoDB+Express网站开发(一):使用Ping++SDK接入支付功能
- 基于Node.js平台mongoDB开发——mongoskin(by vczero)
- 微信平台开发环境nodejs+mongoDB搭建全过程
- Node.js开发入门——MongoDB与Mongoose
- 使用nodejs+mongodb+百度开放云开发微信或web应用
- 基于Node.js平台mongoDB开发——mongoskin(by vczero)
- 零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门