Mongo Group

package com.xxx.statistic.mongo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.xxx.statistic.constants.Constants;
import com.xxx.statistic.file.ExcelWriter;
import com.xxx.statistic.util.GsonHelper;
import com.mongodb.AggregationOutput;
import com.mongodb.BasicDBObject;
import com.mongodb.CommandResult;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;

public class MongoStatistic {

    public static Mongo mongo;
    
    
    public static void genMongoStatisticInfo()throws Exception{
        DB db = mongo.getDB(Constants.MONGO_XXX_DB);
        Set<String> collectionNames = db.getCollectionNames();
        List<Map<String,Object>> records = new ArrayList<Map<String,Object>>();
        for(String name : collectionNames){
            if(name.startsWith("xxx")){
                Map<String,Object> ret = new HashMap<String, Object>();
                DBCollection collection = db.getCollection(name);
                DBObject date = new BasicDBObject();
                date.put("$gte", Integer.parseInt(Constants.START_DATE));
                date.put("$lte", Integer.parseInt(Constants.END_DATE));
                Long count = collection.count(new BasicDBObject("DATE",date));
                ret.put("collection", name);
                ret.put("avg_day_count", count.doubleValue()/n+"");
                CommandResult result = collection.getStats();
                ret.put("total_count",result.get("count").toString());
                ret.put("size",result.get("size").toString());
                ret.put("avgObjSize",result.get("avgObjSize").toString());
                ret.put("storageSize",result.get("storageSize").toString());
                ret.put("numExtents",result.get("numExtents").toString());
                ret.put("totalIndexSize",result.get("totalIndexSize").toString());
                records.add(ret);
            }
        }
        ExcelWriter.write("mongo","xxx",
                new String[]{"collection","avg_day_count",
                            "total_count","size","avgObjSize",
                            "storageSize","numExtents","totalIndexSize"},
                new String[]{"集合名","日均数据增量",
                            "总数据量","占用空间(字节)","平均每条记录占用空间(字节)",
                            "分配的空间(字节)","连续分配的数据块","索引总数"},
                records);
    }

    
    
    public static void genMongoInfo()throws Exception{
        DB db = mongo.getDB(Constants.MONGO_RMM_DB);
        DBCollection collection = db.getCollection("xxx");
        DBObject date = new BasicDBObject();
        date.put("$gte", Integer.parseInt(Constants.START_DATE));
        date.put("$lte", Integer.parseInt(Constants.END_DATE));
        DBObject match = new BasicDBObject("$match", new BasicDBObject("date", date));
        DBObject fields = new BasicDBObject();
        fields.put("_id", "$processorId");
        fields.put("type", new BasicDBObject("$max", "$type"));
        fields.put("triggerType", new BasicDBObject("$max", "$triggerType"));
        fields.put("calculate_num", new BasicDBObject("$sum", "$calculate"));
        fields.put("receive_num", new BasicDBObject("$sum", "$receive"));
        DBObject group = new BasicDBObject("$group", fields);
        AggregationOutput output = collection.aggregate(match,group);
        CommandResult result = output.getCommandResult();
        List<Map<String,Object>> records = GsonHelper.lmso(result.get("result").toString());
        for(Map<String,Object> map :records){
           //TODO 数据加工
        }
        ExcelWriter.write(param1,...);
    }
    
    
    
    
    @SuppressWarnings("deprecation")
    public static void initMongo() throws Exception{
        try {
            mongo = new Mongo(Constants.MONGO_IP, Integer.parseInt(Constants.MONGO_PORT));
        } catch(Exception e) {
            throw new Exception(e);
        }
        DB db = mongo.getDB("admin");
        boolean ok = db.authenticate(Constants.MONGO_USER_NAME , Constants.MONGO_PASSWORD.toCharArray());
        if(!ok){
            mongo = null;
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值