mongoDB工具類以及測試類別【java】

來源:互聯網
上載者:User

標籤:資訊   IV   return   查詢   gets   ESS   limit   apache   tcl   

java操作mongo工具類
package Utils;import com.mongodb.MongoClient;import com.mongodb.MongoCredential;import com.mongodb.ServerAddress;import com.mongodb.client.FindIterable;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import com.mongodb.client.MongoDatabase;import com.mongodb.client.model.Filters;import com.mongodb.client.result.UpdateResult;import org.apache.commons.lang3.StringUtils;import org.apache.log4j.Logger;import org.bson.Document;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Map;public class MongoDBUtil {    private static MongoDBUtil mongoDBUtil;    private static final String PLEASE_SEND_IP = "沒有傳入ip或者連接埠號碼";    private static final String PLEASE_INSTANCE_MONGOCLIENT = "請執行個體化MongoClient";    private static final String PLEASE_SEND_MONGO_REPOSITORY = "請指定要刪除的mongo庫";    private static final String DELETE_MONGO_REPOSITORY_EXCEPTION = "刪除mongo庫異常";    private static final String DELETE_MONGO_REPOSITORY_SUCCESS = "大量刪除mongo庫成功";    private static final String NOT_DELETE_MONGO_REPOSITORY = "未刪除mongo庫";    private static final String DELETE_MONGO_REPOSITORY = "成功刪除mongo庫:";    private static final String CREATE_MONGO_COLLECTION_NOTE = "請指定要建立的庫";    private static final String NO_THIS_MONGO_DATABASE = "未找到指定mongo庫";    private static final String CREATE_MONGO_COLLECTION_SUCCESS = "建立mongo庫成功";    private static final String CREATE_MONGO_COLLECTION_EXCEPTION = "建立mongo庫錯誤";    private static final String NOT_CREATE_MONGO_COLLECTION = "未建立mongo庫collection";    private static final String CREATE_MONGO_COLLECTION_SUCH = "建立mongo庫collection:";    private static final String NO_FOUND_MONGO_COLLECTION = "未找到mongo庫collection";    private static final String INSERT_DOCUMEN_EXCEPTION = "插入文檔失敗";    private static final String INSERT_DOCUMEN_SUCCESSS = "插入文檔成功";    private static final Logger logger = Logger.getLogger(MongoDBUtil.class);    private MongoDBUtil(){    }    private static class SingleHolder{        private static MongoDBUtil mongoDBUtil = new MongoDBUtil();    }    public static MongoDBUtil instance(){        return SingleHolder.mongoDBUtil;    }    public static MongoDBUtil getMongoDBUtilInstance(){        if(mongoDBUtil == null){            return new MongoDBUtil();        }        return mongoDBUtil;    }    /**     * 擷取mongoDB串連     * @param host     * @param port     * @return     */    public MongoClient getMongoConnect(String host,Integer port){        if(StringUtils.isBlank(host) || null == port){            logger.error(PLEASE_SEND_IP);            return null;        }        return new MongoClient(host, port);    }    /**     * 大量刪除mongo庫     * @param mongoClient     * @param dbNames     * @return     */    public String bulkDropDataBase(MongoClient mongoClient,String...dbNames){        if(null == mongoClient) return PLEASE_INSTANCE_MONGOCLIENT;        if(null==dbNames || dbNames.length==0){            return PLEASE_SEND_MONGO_REPOSITORY;        }        try {            Arrays.asList(dbNames).forEach(dbName -> mongoClient.dropDatabase(dbName));            logger.info(DELETE_MONGO_REPOSITORY_SUCCESS);        }catch (Exception e){            e.printStackTrace();            logger.error(DELETE_MONGO_REPOSITORY_EXCEPTION);        }        return dbNames == null ? NOT_DELETE_MONGO_REPOSITORY:DELETE_MONGO_REPOSITORY + String.join(",",dbNames);    }    /**     * 建立指定database的collection     * @param mongoClient     * @param dbName     * @param collections     * @return     */    public String createCollections(MongoClient mongoClient,String dbName,String...collections){        if(null == mongoClient) return PLEASE_INSTANCE_MONGOCLIENT;        if(null==collections || collections.length==0){            return CREATE_MONGO_COLLECTION_NOTE;        }        MongoDatabase mongoDatabase = mongoClient.getDatabase(dbName);        if(null == mongoDatabase) return NO_THIS_MONGO_DATABASE;        try {            Arrays.asList(collections).forEach(collection ->  mongoDatabase.createCollection(collection));            logger.info(CREATE_MONGO_COLLECTION_SUCCESS);            return collections == null ? NOT_CREATE_MONGO_COLLECTION:CREATE_MONGO_COLLECTION_SUCH + String.join(",",collections);        }catch (Exception e){            e.printStackTrace();            logger.error(CREATE_MONGO_COLLECTION_EXCEPTION);        }        return null;    }    /**     * 擷取MongoCollection     * @param mongoClient     * @param dbName     * @param collection     * @return     */    public MongoCollection<Document> getMongoCollection(MongoClient mongoClient,String dbName,String collection){        if(null == mongoClient) return null;        if(StringUtils.isBlank(dbName)) return null;        if(StringUtils.isBlank(collection)) return null;        MongoDatabase mongoDatabase = mongoClient.getDatabase(dbName);        MongoCollection<Document> collectionDocuments = mongoDatabase.getCollection(collection);        if(null == collectionDocuments) return null;        return collectionDocuments;    }    /**     * 擷取到MongoClient     * @param ip     * @param port     * @param userName     * @param dbName     * @param psw     * @returnMongoClient     */    public static MongoClient getMongoClientByCredential(String ip,int port,String userName,String dbName,String psw){        ServerAddress serverAddress = new ServerAddress(ip,port);        List<ServerAddress> addrs = new ArrayList<ServerAddress>();        addrs.add(serverAddress);        //MongoCredential.createScramSha1Credential()三個參數分別為 使用者名稱 資料庫名稱 密碼        MongoCredential credential = MongoCredential.createScramSha1Credential(userName, dbName, psw.toCharArray());        List<MongoCredential> credentials = new ArrayList<MongoCredential>();        credentials.add(credential);        //通過串連認證擷取MongoDB串連        MongoClient mongoClient = new MongoClient(addrs,credentials);        return mongoClient;    }    /**     * 插入文檔資料     * @param mongoCollection     * @param params     */    public void insertDoucument(final MongoCollection<Document> mongoCollection, final Map<String,Object> params){        if(null == mongoCollection) {            logger.info(NO_FOUND_MONGO_COLLECTION);            return;        }        try {            Document document = new Document();            params.keySet().stream().forEach(field -> document.append(field, params.get(field)));            List<Document> documents = new ArrayList<>();            documents.add(document);            mongoCollection.insertMany(documents);            logger.info(INSERT_DOCUMEN_SUCCESSS);        }catch (Exception e){            e.printStackTrace();            logger.error(INSERT_DOCUMEN_EXCEPTION);        }    }    /**     * 更新文檔     * @param mongoCollection     * @param conditionParams     * @param updateParams     */    public  void updateDocument(final MongoCollection<Document> mongoCollection,final Map<String,Object> conditionParams,                               final Map<String,Object> updateParams,final boolean MultiUpdate    ){        if(null == mongoCollection) return;        if (null == conditionParams) return;        if (null == updateParams) return;        Document conditonDocument = new Document();        conditionParams.keySet().stream().filter(p -> null != p).forEach(o -> {            conditonDocument.append(o,conditionParams.get(o));        });        Document updateDocument = new Document();        updateParams.keySet().stream().filter(p -> null != p).forEach(o -> {            updateDocument.append(o,updateParams.get(o));        });        UpdateResult updateResult = null;        if (MultiUpdate){//是否批次更新             updateResult = mongoCollection.updateMany(conditonDocument,new Document("$set",updateDocument));        }else {             updateResult = mongoCollection.updateOne(conditonDocument,new Document("$set",updateDocument));        }        System.out.println("修改了:"+updateResult.getModifiedCount()+" 條資料 ");    }    /**     *條件 刪除文檔 是否多條刪除     * @param mongoCollection     * @param multiple     * @param conditionParams     * @return     */    public long deleteDocument(final MongoCollection<Document> mongoCollection,final boolean multiple,                               final Map<String,Object> conditionParams){        if(null == mongoCollection) return 0;        if(null == conditionParams) return 0;        Document document = new Document();        conditionParams.keySet().stream().filter(p -> null != p).forEach(o -> {            document.append(o,conditionParams.get(o));        });        if(multiple) {            return mongoCollection.deleteMany(document).getDeletedCount();        }        //刪除文檔第一條        return mongoCollection.deleteOne(document).getDeletedCount();    }    /**     * 查詢文檔 帶條件、範圍尋找、排序、分頁     * @param mongoCollection     * @param conditionParams     * @param limit     * @param skip     * @param sortParams     */    public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection, final Map<String,Object> conditionParams,                                                final String op,final String compareField, final Map<String,Integer> gtLtOrOtherParams,                                                final Map<String,Object> sortParams,final Integer skip,final Integer limit                                                ){        if(null == mongoCollection) return null;        FindIterable<Document> findIterable = mongoCollection.find();        Document conditionDocument = new Document();        Document compareDocument = new Document();        if(null != conditionParams && null != findIterable){            conditionParams.forEach((k,v) ->{                if (StringUtils.isNotBlank(k)) {                    conditionDocument.append(k,v);                }            });            findIterable = findIterable.filter(conditionDocument);            MongoCursor<Document> mongoCursor = findIterable.iterator();            while(mongoCursor.hasNext()){                System.out.println("條件過濾  -->"+mongoCursor.next());            }        }        if(null != findIterable && null != gtLtOrOtherParams){            Document gtOrLtDoc = new Document();            gtLtOrOtherParams.forEach((k,v) -> {                if(StringUtils.isNotBlank(k)) gtOrLtDoc.append(k,v);            });            compareDocument = new Document(compareField,gtOrLtDoc);            findIterable = findIterable.filter(new Document(compareField,compareDocument));        }        if (StringUtils.isNotBlank(op)){            if ("and".equals(op)){                findIterable = mongoCollection.find(Filters.and(conditionDocument,compareDocument));            }else if("or".equals(op)){                findIterable = mongoCollection.find(Filters.or(conditionDocument,compareDocument));            }else if("not".equals(op)){//排除範圍                findIterable = mongoCollection.find(Filters.and(conditionDocument,Filters.not(compareDocument)));            }        }else{//預設是AND查詢            findIterable = mongoCollection.find(Filters.and(conditionDocument,compareDocument));        }        MongoCursor<Document> mongoCursor3 = findIterable.iterator();        while(mongoCursor3.hasNext()){            System.out.println(op+"過濾  -->"+mongoCursor3.next());        }        if(null != sortParams){            Document sortDocument = new Document();            sortParams.forEach((k,v) ->{                if (StringUtils.isNotBlank(k)) {                    sortDocument.append(k,v);                }            });            findIterable = findIterable.sort(sortDocument);            MongoCursor<Document> mongoCursor2 = findIterable.iterator();            while(mongoCursor2.hasNext()){                System.out.println("排序  -->"+mongoCursor2.next());            }        }        if(null != findIterable && null != limit){            findIterable = findIterable.limit(limit);        }        if(null != findIterable && null != skip){            findIterable = findIterable.skip(skip);        }        return findIterable;    }    /**     * in查詢     * @param mongoCollection     * @return     */    public FindIterable<Document>  queryDocumentIn(final MongoCollection<Document> mongoCollection,String field, List<String> list    ){        if(null == mongoCollection) return null;        FindIterable<Document> findIterable = mongoCollection.find(new Document(field,new Document("$in",list)));        return findIterable;    }    /**     * 全文檢索查詢     * @param mongoCollection     * @return     */    public FindIterable<Document>  queryDocument(final MongoCollection<Document> mongoCollection    ){        if(null == mongoCollection) return null;        FindIterable<Document> findIterable = mongoCollection.find();        return findIterable;    }    /**     * 查詢文檔 簡單條件查詢     * @param mongoCollection     * @param conditionParams     * @return     */    public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection, final Map<String,Object> conditionParams    ){        if(null == mongoCollection) return null;        FindIterable<Document> findIterable = mongoCollection.find();        if(null == conditionParams || null == findIterable) return findIterable;        Document document = new Document();        conditionParams.forEach((k,v)->{            if (StringUtils.isNotBlank(k)) {                document.append(k,v);            }        });        findIterable = findIterable.filter(document);        return findIterable;    }    /**     * 用於輸出部分的列資訊     * @param documents     */    public static void printDocuments(FindIterable<Document> documents, String[] fields) {        if (fields != null && fields.length > 0) {            int num = 0;            for (Document d : documents) {                StringBuilder stringBuilder = new StringBuilder();                for (int i = 0; i < fields.length; i++) {                    /*if(fields[i].equals("catm")){                    }*/                    stringBuilder.append(fields[i] + ": "+d.getString(fields[i])+" ");                }                System.out.println("第" + (++num) + "條資料: " + stringBuilder);            }        }else{            for (Document d : documents) {                System.out.println(d.toString());            }        }    }    /**     * 用於輸出所有的列資訊     * @param documents     */    public void printDocuments(FindIterable<Document> documents) {        int num = 0;        for (Document d : documents) {            System.out.println("第" + (++num) + "條資料: " + d.toString());        }    }}

  

mongo用到的比較常量定義
public enum MongoConst {    GT("$gt"),    LT("$lt"),    GTE("$gte"),    LTE("$lte"),    AND("and"),    OR("or"),    NOT("not");    private String compareIdentify;    MongoConst(String compareIdentify) {        this.compareIdentify = compareIdentify;    }    public String getCompareIdentify() {        return compareIdentify;    }}

  

工具類的測試類別
package test;import Utils.MongoConst;import Utils.MongoDBUtil;import com.google.common.collect.Lists;import com.google.common.collect.Maps;import com.mongodb.MongoClient;import com.mongodb.client.FindIterable;import com.mongodb.client.MongoCollection;import org.bson.Document;import java.util.HashMap;import java.util.List;import java.util.Map;public class MongoTest02 {    public static void main(String[] args) {        MongoDBUtil mongoDBUtil = MongoDBUtil.getMongoDBUtilInstance();        MongoClient meiyaClient = mongoDBUtil.getMongoClientByCredential("127.0.0.1",27017,"my","my","my");        try {            MongoCollection<Document> collection = mongoDBUtil.getMongoCollection(meiyaClient,"test","hobby");            Map<String,Object> insert = new HashMap<>();               //1、測試增加           /* insert.put("name","zy");            insert.put("age","12");            insert.put("date","2018-04-02T09:44:02.658+0000");            insert.put("school","廈門理工");            mongoDBUtil.insertDoucument(collection,insert);*/            //2、測試條件、範圍、排序查詢           /* Map<String,Object> conditions = Maps.newHashMap();            conditions.put("name","張元");            Map<String,Integer> compares = Maps.newHashMap();            compares.put(MongoConst.GT.getCompareIdentify(),20);            compares.put(MongoConst.LTE.getCompareIdentify(),28);            String opAnd = MongoConst.AND.getCompareIdentify();            Map<String,Object> sortParams = Maps.newHashMap();            sortParams.put("age",-1);            FindIterable<Document> documents = mongoDBUtil.queryDocument(collection,null,opAnd,"age",compares,sortParams,null,2);            mongoDBUtil.printDocuments(documents);*/           //3、in查詢            /*List<String> names = Lists.newArrayList("張媛","zy","zyy");            FindIterable<Document> documents = mongoDBUtil.queryDocumentIn(collection,"name",names);            mongoDBUtil.printDocuments(documents);*/            //4 大量刪除            /*Map<String,Object> conditionParams = Maps.newHashMap();            conditionParams.put("school","廈門理工");            long count = mongoDBUtil.deleteDocument(collection,true,conditionParams);            System.out.println(count);*/            //更新            Map<String,Object> queryParams = Maps.newHashMap();            queryParams.put("school","修改了學校");            Map<String,Object> updateParams = Maps.newHashMap();            updateParams.put("name","修改了名字");            mongoDBUtil.updateDocument(collection,queryParams,updateParams,false);        } catch (Exception e) {            System.err.println(e.getClass().getName() + ": " + e.getMessage());        }    }}

  

mongoDB工具類以及測試類別【java】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.