自己的mongodb的CRUD封装

Posted zyxs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自己的mongodb的CRUD封装相关的知识,希望对你有一定的参考价值。

工具类:
package Utils; import com.google.common.collect.Lists; 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 org.bson.conversions.Bson; 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) return; try { Document document = new Document(); params.keySet().stream().forEach(field -> document.append(field, params.get(field))); List<Document> documents = Lists.newArrayList(); 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 ){ 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 = mongoCollection.updateMany(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 Integer limit, final Integer skip, final Map<String,Integer> sortParams, final Map<String,Integer> gtLtOrOtherParams,final String compareField ){ if(null == mongoCollection) return null; FindIterable<Document> findIterable = mongoCollection.find(); if(null == conditionParams || null == findIterable) return findIterable; Document document = new Document(); conditionParams.keySet().stream().filter(p -> null!=p).forEach(o -> document.append(o,conditionParams.get(o))); findIterable = findIterable.filter(document); MongoCursor<Document> mongoCursor = findIterable.iterator(); while(mongoCursor.hasNext()){ System.out.println(mongoCursor.next()); } if(null == findIterable || null == gtLtOrOtherParams) return findIterable; Document gtOrLtDoc = new Document(); gtLtOrOtherParams.keySet().stream().filter(p -> null!=p).forEach(o -> gtOrLtDoc.append(o,gtLtOrOtherParams.get(o))); findIterable = findIterable.filter(new Document(compareField,gtOrLtDoc)); if(null == findIterable || null == limit) return findIterable; findIterable = findIterable.limit(limit); if(null == findIterable || null == skip) return findIterable; findIterable = findIterable.skip(skip); if(null == sortParams) return findIterable; Document sortDocument = new Document(); sortParams.keySet().stream().filter(p -> null!=p).forEach(o -> sortDocument.append(o,sortParams.get(o))); findIterable = findIterable.filter(sortDocument); MongoCursor<Document> mongoCursor2 = findIterable.iterator(); while(mongoCursor2.hasNext()){ System.out.println(mongoCursor2.next()); } 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 * @param limit * @param skip * @param sortParams * @return */ public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection, final Map<String,Object> conditionParams, final Integer limit, final Integer skip, final Map<String,Integer> sortParams ){ if(null == mongoCollection) return null; /** * 1. 获取迭代器FindIterable<Document> * 2. 获取游标MongoCursor<Document> * 3. 通过游标遍历检索出的文档集合 * */ FindIterable<Document> findIterable = mongoCollection.find(); if(null == conditionParams || null == findIterable) return findIterable; Document document = new Document(); conditionParams.keySet().stream().filter(p -> null!=p).forEach(o -> document.append(o,conditionParams.get(o))); findIterable = findIterable.filter(document); if(null == findIterable || null == limit) return findIterable; findIterable = findIterable.limit(limit); if(null == findIterable || null == skip) return findIterable; findIterable = findIterable.skip(skip); if(null == sortParams) return findIterable; Document sortDocument = new Document(); sortParams.keySet().stream().filter(p -> null!=p).forEach(o -> sortDocument.append(o,sortParams.get(o))); findIterable = findIterable.sort(sortDocument); 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.keySet().stream().filter(p -> null!=p).forEach(o -> document.append(o,conditionParams.get(o))); findIterable = findIterable.filter(document); return findIterable; } /** * 用于输出部分的列信息 * @param documents */ public 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); } } } /** * 用于输出所有的列信息 * @param documents */ public void printDocuments(FindIterable<Document> documents) { int num = 0; for (Document d : documents) { System.out.println("第" + (++num) + "条数据: " + d.toString()); } } }

  测试类:

public class Mongo {

    public static void main(String[] args) {

        MongoDBUtil mongoDBUtil = MongoDBUtil.getMongoDBUtilInstance();
        //MongoClient client = MongoDBUtil.instance().getMongoConnect("127.0.0.1",27017); 连接本地的mongo
        MongoClient client = mongoDBUtil.getMongoClientByCredential("127.0.0.1",27017,"my","my","my");

        try {
            MongoCollection<Document> collection = mongoDBUtil.getMongoCollection(client,"whale","wb0097waterdepartmentbasic");

            //1、 简单的条件查询
            Map<String,Object> conditionParams = Maps.newHashMap();
            conditionParams.put("wbtp","003");
            FindIterable<Document> documents =  mongoDBUtil.queryDocument(collection,conditionParams);
            mongoDBUtil.printDocuments(documents);

            //插入文档
           for(int i=0;i<=100;i++) {
                Map<String, Object> params = Maps.newHashMap();
                params.put("qq", "zy");
                params.put("time", new Date());
                params.put("name", "bb" + i);
               params.put("num", i);
                mongoDBUtil.insertDoucument(collection, params);
            }

            //更改文档
            Map<String,Object> condParams = Maps.newHashMap();
            condParams.put("description","database");
            condParams.put("aa","bbb");
            Map<String,Object> updateParams = Maps.newHashMap();
            updateParams.put("description","eee");
            MongoDBUtil.instance().updateDocument(collection,condParams,updateParams);

//            //删除文档数据
            Map<String,Object> condParams1 = Maps.newHashMap();
            condParams.put("qq",1111);
//
            MongoDBUtil.instance().deleteDocument(collection,true,condParams1);

            //复杂的查询文档
           Map<String,Object> condParams2 = Maps.newHashMap();
            condParams.put("qq","zy");
            Map<String,Integer> sortParams = Maps.newHashMap();
            sortParams.put("num",-1);
            sortParams.put("name",1);
            Map<String,Integer> compareParams = Maps.newHashMap();
            compareParams.put("$gt",75);
            compareParams.put("$lt",83);
            FindIterable<Document> documents1 = MongoDBUtil.instance().queryDocument(collection,condParams2,10,0,sortParams,compareParams,"num");
            mongoDBUtil.printDocuments(documents1);
        } catch (Exception e) {
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
        }

    }
}

  


以上是关于自己的mongodb的CRUD封装的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core MongoDB数据仓储和工作单元模式封装

Mongodb系列- java客户端简单使用(CRUD)

为 MongoDB 上的 CRUD 操作组织 Go 代码

python3操作MongoDB的crud以及聚合案例,代码可直接运行(python经典编程案例)

python3操作MongoDB的crud以及聚合案例,代码可直接运行(python经典编程案例)

java mongodb-crud