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()); } } }