java操作MongoDB工具类


public class  MongodbUtil {


    private static MongoClient mongoClient;
    private static final Logger log = LoggerFactory.getLogger(MongodbUtil.class);
    private static SysConfig sysConfig;
    public  static void init() {
        String userName = sysConfig.getMdUserName();
        String password = sysConfig.getMdPassword();
        String host = sysConfig.getMdIp();
        String dataBase = sysConfig.getMdDatabase();
        int port = sysConfig.getMdPort();
        MongoClientOptions clientOptions =   
                new MongoClientOptions.Builder()  
                .connectionsPerHost(sysConfig.getMdConnectionsPerHost())  
                .maxWaitTime(sysConfig.getMdMaxWaitTime())
                .socketTimeout(sysConfig.getMdSocketTimeout())
                .connectTimeout(sysConfig.getMdConnectTimeout())
                .threadsAllowedToBlockForConnectionMultiplier(sysConfig.getMdThreadsAllowed())
                .writeConcern(WriteConcern.SAFE)
                .build(); 
        List lstCredentials =   
                    Arrays.asList(MongoCredential.createCredential(  
                        userName, dataBase, password.toCharArray()));
        
        mongoClient = new MongoClient(new ServerAddress(host,port),lstCredentials, clientOptions);
    }
    

    /**
     * 获取DB实例 - 指定DB
     * 
     * @param dbName
     * @return
     */
    public static MongoDatabase getDB(String dbName) {
        if (dbName != null && !"".equals(dbName)) {
            MongoDatabase database = mongoClient.getDatabase(dbName);
            return database;
        }
        return null;
    }
    
    /**
     * 获取collection对象 - 指定Collection
     * 
     * @param collName
     * @return
     */
    public static MongoCollection getCollection(String dbName, String collName) {
        if (null == collName || "".equals(collName)) {
            return null;
        }
        if (null == dbName || "".equals(dbName)) {
            return null;
        }
        MongoCollection collection = mongoClient.getDatabase(dbName).getCollection(collName);
        return collection;
    }
    
    /** 统计指定集合的总数 */
    public static int getCount(MongoCollection coll) {
        int count = (int) coll.count();
        return count;
    }
    
    /** 条件查询 */
    public static MongoCursor find(MongoCollection coll, Bson filter) {
        return coll.find(filter).iterator();
    }
    
    /** 分页查询 */
    public static MongoCursor findByPage(MongoCollection coll, Bson filter, int pageNo, int pageSize) {
        return coll.find(filter).skip((pageNo - 1) * pageSize).limit(pageSize).iterator();
    }
    
    /**
     * 查询最大最小值
     * @param coll
     * @param filter
     * @param orderCol
     * @param orderType -1:最大值;1:最小值
     * @return
     */
    public static MongoCursor getMaxOrMinDocument(MongoCollection coll, Bson filter,String orderCol,int orde) {
        BasicDBObject orderObj = new BasicDBObject(orderCol,orde);
        return coll.find(filter).sort(orderObj).limit(1).iterator();
    }
    
    /**
     * 合并多条数据(有则更新,无则插入)
     * @param coll
     * @param queryCols 多个字段请用,分隔 
     * @param list
     * @return
     */
    public static int mergeList(MongoCollection coll,String queryCols,List list){
        long startT = System.currentTimeMillis();
        int result = list.size();
        JSONArray array = JSONArray.parseArray(JSON.toJSONString(list));
        for (Map map : list) {
            Document doc = switchMapToDocument(map);
            Document queryDoc = new Document();
            String[] cols = queryCols.split(",");
            for (String col : cols) {
                queryDoc.put(col, map.get(col));
            }
            coll.updateOne( 
                    queryDoc,                    //相当于where条件
                    new Document("$set", doc),                         //要被修改的文档
                    new UpdateOptions().upsert(true));                //是否执行插入操作
            
        }
        long endT = System.currentTimeMillis();
        log.info("--  mergeList 合并数据耗时:" + (endT- startT)/1000 + "S.");
        return result;
    }
    
    
    /**
     * 插入 多条数据
     * @param coll
     * @param colMap
     * @param list
     * @return
     */
    public static int insrtList(MongoCollection coll,List list){
        long startT = System.currentTimeMillis();
        int result = list.size();
        List tempList = new ArrayList();
        for (Map map : list) {
            tempList.add(switchMapToDocument(map));
        }
        coll.insertMany(tempList);
        long endT = System.currentTimeMillis();
        log.info("--  insrtList 插入数据耗时:" + (endT- startT)/1000 + "S.");
        return result;
    }
    
    /**
     * 插入 单条数据
     * @param coll
     * @param colMap
     * @param list
     * @return
     */
    public static int insertMap(MongoCollection coll,Map map){
        Document doc = switchMapToDocument(map);
        coll.insertOne(doc);
        return 1;
    }
    
    public static Document switchMapToDocument(Map map){
        String json = JSON.toJSONString(map);
        return Document.parse(json);
    }
    
    /**
     * 排序+分页查询
     * @param coll
     * @param filter
     * @param pageNo
     * @param pageSize
     * @param sortCondiition  (例如:Bson orderBy = new BasicDBObject("_id", 1)1表示使用升序排列,-1表示降序排序)
     * @return
     */
    public static MongoCursor findBypageAndSort(MongoCollection coll,Bson filter, int pageNo, int pageSize,Bson sortCondiition){
            return coll.find(filter).sort(sortCondiition).skip((pageNo - 1) * pageSize).limit(pageSize).iterator();
    }    
    
    /**
     * 排序+分页查询+强制命中索引
     * @param coll
     * @param filter
     * @param pageNo
     * @param pageSize
     * @param sortCondiition
     * @param forceFilter(强制命中索引)
     * @return
     */
    //public static MongoCursor findBypageAndSortAndHint(MongoCollection coll,Bson filter, int pageNo, int pageSize,Bson sortCondiition,Bson forceFilter){
    //    return coll.find(filter).hint(forceFilter).sort(sortCondiition).skip((pageNo - 1) * pageSize).limit(pageSize).iterator();
    //}  
    
    /**
     * 关闭Mongodb
     */
    public static void close() {
        if (mongoClient != null) {
            mongoClient.close();
            mongoClient = null;
        }
    }
    
    /**
     * 删除单个数据
     * @param coll
     * @param doc
     */
    public static void deleteOneDoc(MongoCollection coll,Document doc){
         coll.deleteOne(doc);
    }
   
    /**
     * 根据条件统计集合数据条数 
     * @param coll
     * @param fiter
     * @return
     */
    public static int countByCondition(MongoCollection coll,Bson fiter){
        return (int)coll.count(fiter);
    }

}
 

你可能感兴趣的:(杂记)