1. 工具类:
    package Utils;
  2.  
  3. import com.google.common.collect.Lists;
  4. import com.mongodb.MongoClient;
  5. import com.mongodb.MongoCredential;
  6. import com.mongodb.ServerAddress;
  7. import com.mongodb.client.FindIterable;
  8. import com.mongodb.client.MongoCollection;
  9. import com.mongodb.client.MongoCursor;
  10. import com.mongodb.client.MongoDatabase;
  11. import com.mongodb.client.model.Filters;
  12. import com.mongodb.client.result.UpdateResult;
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.apache.log4j.Logger;
  15. import org.bson.Document;
  16. import org.bson.conversions.Bson;
  17.  
  18. import java.util.ArrayList;
  19. import java.util.Arrays;
  20. import java.util.List;
  21. import java.util.Map;
  22.  
  23. public class MongoDBUtil {
  24. private static MongoDBUtil mongoDBUtil;
  25.  
  26. private static final String PLEASE_SEND_IP = "没有传入ip或者端口号";
  27. private static final String PLEASE_INSTANCE_MONGOCLIENT = "请实例化MongoClient";
  28. private static final String PLEASE_SEND_MONGO_REPOSITORY = "请指定要删除的mongo库";
  29. private static final String DELETE_MONGO_REPOSITORY_EXCEPTION = "删除mongo库异常";
  30. private static final String DELETE_MONGO_REPOSITORY_SUCCESS = "批量删除mongo库成功";
  31. private static final String NOT_DELETE_MONGO_REPOSITORY = "未删除mongo库";
  32. private static final String DELETE_MONGO_REPOSITORY = "成功删除mongo库:";
  33. private static final String CREATE_MONGO_COLLECTION_NOTE = "请指定要创建的库";
  34. private static final String NO_THIS_MONGO_DATABASE = "未找到指定mongo库";
  35. private static final String CREATE_MONGO_COLLECTION_SUCCESS = "创建mongo库成功";
  36. private static final String CREATE_MONGO_COLLECTION_EXCEPTION = "创建mongo库错误";
  37. private static final String NOT_CREATE_MONGO_COLLECTION = "未创建mongo库collection";
  38. private static final String CREATE_MONGO_COLLECTION_SUCH = "创建mongo库collection:";
  39. private static final String NO_FOUND_MONGO_COLLECTION = "未找到mongo库collection";
  40. private static final String INSERT_DOCUMEN_EXCEPTION = "插入文档失败";
  41. private static final String INSERT_DOCUMEN_SUCCESSS = "插入文档成功";
  42.  
  43. private static final Logger logger = Logger.getLogger(MongoDBUtil.class);
  44.  
  45. private MongoDBUtil(){
  46.  
  47. }
  48.  
  49. private static class SingleHolder{
  50. private static MongoDBUtil mongoDBUtil = new MongoDBUtil();
  51. }
  52.  
  53. public static MongoDBUtil instance(){
  54.  
  55. return SingleHolder.mongoDBUtil;
  56. }
  57.  
  58. public static MongoDBUtil getMongoDBUtilInstance(){
  59. if(mongoDBUtil == null){
  60. return new MongoDBUtil();
  61. }
  62. return mongoDBUtil;
  63. }
  64.  
  65. /**
  66. * 获取mongoDB连接
  67. * @param host
  68. * @param port
  69. * @return
  70. */
  71. public MongoClient getMongoConnect(String host,Integer port){
  72.  
  73. if(StringUtils.isBlank(host) || null == port){
  74. logger.error(PLEASE_SEND_IP);
  75. return null;
  76. }
  77.  
  78. return new MongoClient(host, port);
  79. }
  80.  
  81. /**
  82. * 批量删除mongo库
  83. * @param mongoClient
  84. * @param dbNames
  85. * @return
  86. */
  87. public String bulkDropDataBase(MongoClient mongoClient,String...dbNames){
  88.  
  89. if(null == mongoClient) return PLEASE_INSTANCE_MONGOCLIENT;
  90.  
  91. if(null==dbNames || dbNames.length==0){
  92. return PLEASE_SEND_MONGO_REPOSITORY;
  93. }
  94. try {
  95. Arrays.asList(dbNames).forEach(dbName -> mongoClient.dropDatabase(dbName));
  96. logger.info(DELETE_MONGO_REPOSITORY_SUCCESS);
  97. }catch (Exception e){
  98. e.printStackTrace();
  99. logger.error(DELETE_MONGO_REPOSITORY_EXCEPTION);
  100. }
  101. return dbNames == null ? NOT_DELETE_MONGO_REPOSITORY:DELETE_MONGO_REPOSITORY + String.join(",",dbNames);
  102. }
  103.  
  104. /**
  105. * 创建指定database的collection
  106. * @param mongoClient
  107. * @param dbName
  108. * @param collections
  109. * @return
  110. */
  111. public String createCollections(MongoClient mongoClient,String dbName,String...collections){
  112.  
  113. if(null == mongoClient) return PLEASE_INSTANCE_MONGOCLIENT;
  114.  
  115. if(null==collections || collections.length==0){
  116. return CREATE_MONGO_COLLECTION_NOTE;
  117. }
  118.  
  119. MongoDatabase mongoDatabase = mongoClient.getDatabase(dbName);
  120. if(null == mongoDatabase) return NO_THIS_MONGO_DATABASE;
  121.  
  122. try {
  123. Arrays.asList(collections).forEach(collection -> mongoDatabase.createCollection(collection));
  124. logger.info(CREATE_MONGO_COLLECTION_SUCCESS);
  125. return collections == null ? NOT_CREATE_MONGO_COLLECTION:CREATE_MONGO_COLLECTION_SUCH + String.join(",",collections);
  126. }catch (Exception e){
  127. e.printStackTrace();
  128. logger.error(CREATE_MONGO_COLLECTION_EXCEPTION);
  129. }
  130.  
  131. return null;
  132. }
  133.  
  134. /**
  135. * 获取MongoCollection
  136. * @param mongoClient
  137. * @param dbName
  138. * @param collection
  139. * @return
  140. */
  141. public MongoCollection<Document> getMongoCollection(MongoClient mongoClient,String dbName,String collection){
  142.  
  143. if(null == mongoClient) return null;
  144.  
  145. if(StringUtils.isBlank(dbName)) return null;
  146.  
  147. if(StringUtils.isBlank(collection)) return null;
  148.  
  149. MongoDatabase mongoDatabase = mongoClient.getDatabase(dbName);
  150.  
  151. MongoCollection<Document> collectionDocuments = mongoDatabase.getCollection(collection);
  152.  
  153. if(null == collectionDocuments) return null;
  154.  
  155. return collectionDocuments;
  156. }
  157.  
  158. /**
  159. * 获取到MongoClient
  160. * @param ip
  161. * @param port
  162. * @param userName
  163. * @param dbName
  164. * @param psw
  165. * @returnMongoClient
  166. */
  167. public static MongoClient getMongoClientByCredential(String ip,int port,String userName,String dbName,String psw){
  168. ServerAddress serverAddress = new ServerAddress(ip,port);
  169. List<ServerAddress> addrs = new ArrayList<ServerAddress>();
  170. addrs.add(serverAddress);
  171.  
  172. //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
  173. MongoCredential credential = MongoCredential.createScramSha1Credential(userName, dbName, psw.toCharArray());
  174. List<MongoCredential> credentials = new ArrayList<MongoCredential>();
  175. credentials.add(credential);
  176.  
  177. //通过连接认证获取MongoDB连接
  178. MongoClient mongoClient = new MongoClient(addrs,credentials);
  179. return mongoClient;
  180. }
  181.  
  182. /**
  183. * 插入文档数据
  184. * @param mongoCollection
  185. * @param params
  186. */
  187. public void insertDoucument(final MongoCollection<Document> mongoCollection, final Map<String,Object> params){
  188. if(null == mongoCollection) return;
  189.  
  190. try {
  191. Document document = new Document();
  192. params.keySet().stream().forEach(field -> document.append(field, params.get(field)));
  193.  
  194. List<Document> documents = Lists.newArrayList();
  195. documents.add(document);
  196. mongoCollection.insertMany(documents);
  197. logger.info(INSERT_DOCUMEN_SUCCESSS);
  198. }catch (Exception e){
  199. e.printStackTrace();
  200. logger.error(INSERT_DOCUMEN_EXCEPTION);
  201. }
  202. }
  203.  
  204. /**
  205. * 更新文档
  206. * @param mongoCollection
  207. * @param conditionParams
  208. * @param updateParams
  209. */
  210. public void updateDocument(final MongoCollection<Document> mongoCollection,final Map<String,Object> conditionParams,
  211. final Map<String,Object> updateParams
  212. ){
  213.  
  214. if(null == mongoCollection) return;
  215.  
  216. if (null == conditionParams) return;
  217.  
  218. if (null == updateParams) return;
  219.  
  220. Document conditonDocument = new Document();
  221. conditionParams.keySet().stream().filter(p -> null != p).forEach(o -> {
  222. conditonDocument.append(o,conditionParams.get(o));
  223. });
  224.  
  225. Document updateDocument = new Document();
  226. updateParams.keySet().stream().filter(p -> null != p).forEach(o -> {
  227. updateDocument.append(o,updateParams.get(o));
  228. });
  229. UpdateResult updateResult = mongoCollection.updateMany(conditonDocument,new Document("$set",updateDocument));
  230.  
  231. System.out.println("修改了:"+updateResult.getModifiedCount()+" 条数据 ");
  232.  
  233. }
  234.  
  235. /**
  236. *删除文档
  237. * @param mongoCollection
  238. * @param multiple
  239. * @param conditionParams
  240. * @return
  241. */
  242. public long deleteDocument(final MongoCollection<Document> mongoCollection,final boolean multiple,
  243. final Map<String,Object> conditionParams){
  244.  
  245. if(null == mongoCollection) return 0;
  246.  
  247. if(null == conditionParams) return 0;
  248.  
  249. Document document = new Document();
  250.  
  251. conditionParams.keySet().stream().filter(p -> null != p).forEach(o -> {
  252. document.append(o,conditionParams.get(o));
  253. });
  254.  
  255. if(multiple) {
  256. return mongoCollection.deleteMany(document).getDeletedCount();
  257. }
  258.  
  259. //删除文档第一条
  260. return mongoCollection.deleteOne(document).getDeletedCount();
  261. }
  262.  
  263. /**
  264. * 查询文档 带范围查找、分页、排序
  265. * @param mongoCollection
  266. * @param conditionParams
  267. * @param limit
  268. * @param skip
  269. * @param sortParams
  270. */
  271. public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection, final Map<String,Object> conditionParams,
  272. final Integer limit, final Integer skip, final Map<String,Integer> sortParams,
  273. final Map<String,Integer> gtLtOrOtherParams,final String compareField
  274. ){
  275.  
  276. if(null == mongoCollection) return null;
  277.  
  278. FindIterable<Document> findIterable = mongoCollection.find();
  279.  
  280. if(null == conditionParams || null == findIterable) return findIterable;
  281.  
  282. Document document = new Document();
  283. conditionParams.keySet().stream().filter(p -> null!=p).forEach(o -> document.append(o,conditionParams.get(o)));
  284.  
  285. findIterable = findIterable.filter(document);
  286.  
  287. MongoCursor<Document> mongoCursor = findIterable.iterator();
  288. while(mongoCursor.hasNext()){
  289. System.out.println(mongoCursor.next());
  290. }
  291. if(null == findIterable || null == gtLtOrOtherParams) return findIterable;
  292.  
  293. Document gtOrLtDoc = new Document();
  294. gtLtOrOtherParams.keySet().stream().filter(p -> null!=p).forEach(o -> gtOrLtDoc.append(o,gtLtOrOtherParams.get(o)));
  295.  
  296. findIterable = findIterable.filter(new Document(compareField,gtOrLtDoc));
  297.  
  298. if(null == findIterable || null == limit) return findIterable;
  299. findIterable = findIterable.limit(limit);
  300.  
  301. if(null == findIterable || null == skip) return findIterable;
  302. findIterable = findIterable.skip(skip);
  303.  
  304. if(null == sortParams) return findIterable;
  305.  
  306. Document sortDocument = new Document();
  307. sortParams.keySet().stream().filter(p -> null!=p).forEach(o -> sortDocument.append(o,sortParams.get(o)));
  308.  
  309. findIterable = findIterable.filter(sortDocument);
  310. MongoCursor<Document> mongoCursor2 = findIterable.iterator();
  311. while(mongoCursor2.hasNext()){
  312. System.out.println(mongoCursor2.next());
  313. }
  314.  
  315. return findIterable;
  316.  
  317. }
  318.  
  319. /**
  320. * 全文查询
  321. * @param mongoCollection
  322. * @return
  323. */
  324. public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection
  325. ){
  326. if(null == mongoCollection) return null;
  327. FindIterable<Document> findIterable = mongoCollection.find();
  328. return findIterable;
  329. }
  330.  
  331. /**
  332. *带排序的查询
  333. * @param mongoCollection
  334. * @param conditionParams
  335. * @param limit
  336. * @param skip
  337. * @param sortParams
  338. * @return
  339. */
  340. public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection, final Map<String,Object> conditionParams,
  341. final Integer limit, final Integer skip, final Map<String,Integer> sortParams
  342.  
  343. ){
  344. if(null == mongoCollection) return null;
  345. /**
  346. * 1. 获取迭代器FindIterable<Document>
  347. * 2. 获取游标MongoCursor<Document>
  348. * 3. 通过游标遍历检索出的文档集合
  349. * */
  350. FindIterable<Document> findIterable = mongoCollection.find();
  351. if(null == conditionParams || null == findIterable) return findIterable;
  352. Document document = new Document();
  353. conditionParams.keySet().stream().filter(p -> null!=p).forEach(o -> document.append(o,conditionParams.get(o)));
  354. findIterable = findIterable.filter(document);
  355.  
  356. if(null == findIterable || null == limit) return findIterable;
  357. findIterable = findIterable.limit(limit);
  358.  
  359. if(null == findIterable || null == skip) return findIterable;
  360. findIterable = findIterable.skip(skip);
  361.  
  362. if(null == sortParams) return findIterable;
  363.  
  364. Document sortDocument = new Document();
  365. sortParams.keySet().stream().filter(p -> null!=p).forEach(o -> sortDocument.append(o,sortParams.get(o)));
  366. findIterable = findIterable.sort(sortDocument);
  367.  
  368. return findIterable;
  369.  
  370. }
  371.  
  372. /**
  373. * 查询文档 简单条件查询
  374. * @param mongoCollection
  375. * @param conditionParams
  376. * @return
  377. */
  378. public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection, final Map<String,Object> conditionParams
  379. ){
  380.  
  381. if(null == mongoCollection) return null;
  382.  
  383. FindIterable<Document> findIterable = mongoCollection.find();
  384.  
  385. if(null == conditionParams || null == findIterable) return findIterable;
  386.  
  387. Document document = new Document();
  388. conditionParams.keySet().stream().filter(p -> null!=p).forEach(o -> document.append(o,conditionParams.get(o)));
  389. findIterable = findIterable.filter(document);
  390.  
  391. return findIterable;
  392.  
  393. }
  394.  
  395. /**
  396. * 用于输出部分的列信息
  397. * @param documents
  398. */
  399. public void printDocuments(FindIterable<Document> documents, String[] fields) {
  400. if (fields != null && fields.length > 0) {
  401. int num = 0;
  402. for (Document d : documents) {
  403. StringBuilder stringBuilder = new StringBuilder();
  404. for (int i = 0; i < fields.length; i++) {
  405. if(fields[i].equals("catm")){
  406.  
  407. }
  408. stringBuilder.append(fields[i] + ": "+d.getString(fields[i])+" ");
  409. }
  410. System.out.println("第" + (++num) + "条数据: " + stringBuilder);
  411.  
  412. }
  413. }
  414. }
  415.  
  416. /**
  417. * 用于输出所有的列信息
  418. * @param documents
  419. */
  420. public void printDocuments(FindIterable<Document> documents) {
  421. int num = 0;
  422. for (Document d : documents) {
  423. System.out.println("第" + (++num) + "条数据: " + d.toString());
  424. }
  425. }
  426.  
  427. }

  测试类:

  1. public class Mongo {
  2.  
  3. public static void main(String[] args) {
  4.  
  5. MongoDBUtil mongoDBUtil = MongoDBUtil.getMongoDBUtilInstance();
  6. //MongoClient client = MongoDBUtil.instance().getMongoConnect("127.0.0.1",27017); 连接本地的mongo
  7. MongoClient client = mongoDBUtil.getMongoClientByCredential("127.0.0.1",27017,"my","my","my");
  8.  
  9. try {
  10. MongoCollection<Document> collection = mongoDBUtil.getMongoCollection(client,"whale","wb0097waterdepartmentbasic");
  11.  
  12. //1、 简单的条件查询
  13. Map<String,Object> conditionParams = Maps.newHashMap();
  14. conditionParams.put("wbtp","003");
  15. FindIterable<Document> documents = mongoDBUtil.queryDocument(collection,conditionParams);
  16. mongoDBUtil.printDocuments(documents);
  17.  
  18. //插入文档
  19. for(int i=0;i<=100;i++) {
  20. Map<String, Object> params = Maps.newHashMap();
  21. params.put("qq", "zy");
  22. params.put("time", new Date());
  23. params.put("name", "bb" + i);
  24. params.put("num", i);
  25. mongoDBUtil.insertDoucument(collection, params);
  26. }
  27.  
  28. //更改文档
  29. Map<String,Object> condParams = Maps.newHashMap();
  30. condParams.put("description","database");
  31. condParams.put("aa","bbb");
  32. Map<String,Object> updateParams = Maps.newHashMap();
  33. updateParams.put("description","eee");
  34. MongoDBUtil.instance().updateDocument(collection,condParams,updateParams);
  35.  
  36. // //删除文档数据
  37. Map<String,Object> condParams1 = Maps.newHashMap();
  38. condParams.put("qq",1111);
  39. //
  40. MongoDBUtil.instance().deleteDocument(collection,true,condParams1);
  41.  
  42. //复杂的查询文档
  43. Map<String,Object> condParams2 = Maps.newHashMap();
  44. condParams.put("qq","zy");
  45. Map<String,Integer> sortParams = Maps.newHashMap();
  46. sortParams.put("num",-1);
  47. sortParams.put("name",1);
  48. Map<String,Integer> compareParams = Maps.newHashMap();
  49. compareParams.put("$gt",75);
  50. compareParams.put("$lt",83);
  51. FindIterable<Document> documents1 = MongoDBUtil.instance().queryDocument(collection,condParams2,10,0,sortParams,compareParams,"num");
  52. mongoDBUtil.printDocuments(documents1);
  53. } catch (Exception e) {
  54. System.err.println(e.getClass().getName() + ": " + e.getMessage());
  55. }
  56.  
  57. }
  58. }

  

自己的mongodb的CRUD封装的更多相关文章

  1. MongoDB的CRUD操作

    1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...

  2. MongoDB简单CRUD场景

    MongoDB简单CRUD命令操作 (1)新建数据库:use 数据库名 (2)显示所有数据库:show dbs; (3)新建集合(两种方式)  隐式创建:在创建集合的同时往集合里面添加数据---db. ...

  3. hibernate和mybatis的之CRUD封装差别

    hibernate和mybatis的之CRUD封装差别 以下讲的是基于MVC三层架构. 由于设计架构的差别,hibernate在实际编程中可以把基础的CRUD封装,比如BaseDao类.其它类只要去继 ...

  4. springboot连接mongodb进行CRUD

    springboot连接mongodb进行CRUD的过程: 在执行以下操作前已安装了mongodb并创建了用户和数据库,使用Robo 3T可成功连接. 1.创建springboot项目,加入以下mav ...

  5. Java对MongoDB的CRUD

    https://blog.51cto.com/aiilive/1339058 MongoDB提供的Java操作API可以说是对Mongo数据库命令的Java翻译,熟悉Mongo命令,熟悉Java操作数 ...

  6. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  7. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  8. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  9. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

随机推荐

  1. DateGridView控件与mysql交互

    private void dgv() { //Ip+端口+数据库名+用户名+密码 string connectStr = "server=127.0.0.1;port=3306;databa ...

  2. Blob与Clob转字符串

    /** * blob转字符串 * * @param blob * @return * @throws IOException * @throws SQLException */ public stat ...

  3. xcode打包真机测试

    背景:xocode版本低于真机版本 解决方法:

  4. buildroot管理uboot+kernel+rootfs

    鉴于自己制作根文件系统太麻烦了,所以想用buildroot管理uboot,kernel,另外还可以自动生产rootfs,于是花了两天研究了下buildroot的框架和使用,在自己的2440开发板上也跑 ...

  5. xamarin android 文件选择

    调出选择界面: Intent intent = new Intent(Intent.ActionGetContent); intent.AddCategory(Intent.CategoryOpena ...

  6. Collections.sort排序

    默认是升序,即Collections.sort(list),对list进行升序排列,如果想降序则需要通过compare这些参数来实现了

  7. 【转】百度UEditor控件中的map组件不支持https使用的问题解决

    原文地址:https://blog.csdn.net/stacy06/article/details/82626363 最近项目部署到了https环境下,使用的UEditor富文本编辑器中的map组件 ...

  8. 纪念使用FTPClient工具所遇到的

    我所使用的是org.apache.commons.net.ftp.FTPClient.  查了资料还有其余几个FTPClient,其余的先不展开. 1.ftpClient.changeWorkingD ...

  9. [ZZ] 边缘检测 梯度与Roberts、Prewitt、Sobel、Lapacian算子

    http://blog.csdn.net/swj110119/article/details/51777422 一.学习心得: 学习图像处理的过程中,刚开始遇到图像梯度和一些算子的概念,这两者到底是什 ...

  10. failed: dlopen failed: cannot locate symbol

    修改proj.android/jni/Application.mk 添加:APP_PLATFORM := android-19