moogdb操作
本文转载自 https://my.oschina.net/kakakaka/blog/347954
首先,下载mongdb对JAVA的支持,点击这里下载驱动包,这里博主下载的是2.10.1版。
mongdb版本为2.4.9
在项目中导入该驱动包。
打开shell,在终端输入mongo,显示如下
只有默认的三个数据库。
新建一个java project
代码如下,
1.操控mongdb连接,使用MongoOptions来设置一些参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package Util; import java.net.UnknownHostException; import com.mongodb.DB; import com.mongodb.Mongo; import com.mongodb.MongoOptions; //数据库工具类 public class MongoDBUtil { private static Mongo mongo = null ; private static String DBString = "MongoDBTest" ; //数据库名 private static String hostName = "localhost" ; //主机名 private static int port = 27017 ; //端口号 private static int poolSize = 10 ; //连接池大小 private MongoDBUtil(){ } //获取数据库连接 public static DB getDB(){ if (mongo == null ){ init(); } return mongo.getDB(DBString); } //初始化数据库 private static void init(){ try { //实例化Mongo mongo = new Mongo(hostName, port); MongoOptions opt = mongo.getMongoOptions(); //设置连接池大小 opt.connectionsPerHost = poolSize; } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
2.基本操作接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package DAO; import java.util.List; import com.mongodb.BasicDBObject; //数据库CRUD基本操作 public interface BaseDAO { public boolean insert(String collectionName, BasicDBObject bean); public boolean delete(String collectionName, BasicDBObject bean); public List find(String collectionName, BasicDBObject bean); public boolean update(String collectionName, BasicDBObject oldBean, BasicDBObject newBean); } |
3.基本操作实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | package DAO.Impl; import java.util.List; import com.mongodb.BasicDBObject; import com.mongodb.DB; import Util.MongoDBUtil; import DAO.BaseDAO; //数据库基本操作实现 public class BaseDAOImpl implements BaseDAO { @Override public boolean insert(String collectionName, BasicDBObject bean) { DB db = MongoDBUtil.getDB(); db.getCollection(collectionName).insert(bean); return false ; } @Override public boolean delete(String collectionName, BasicDBObject bean) { DB db = MongoDBUtil.getDB(); db.getCollection(collectionName).remove(bean); return false ; } @Override public List find(String collectionName, BasicDBObject bean) { DB db = MongoDBUtil.getDB(); List list = db.getCollection(collectionName).find(bean).toArray(); return list ; } @Override public boolean update(String collectionName, BasicDBObject oldBean, BasicDBObject newBean) { DB db = MongoDBUtil.getDB(); db.getCollection(collectionName).update(oldBean, newBean); return false ; } } |
4.基本操作测试
4.1添加文档操作
1 2 3 4 5 6 | BaseDAOImpl baseDAOImpl = new BaseDAOImpl(); BasicDBObject beanOne = new BasicDBObject(); beanOne.put( "name" , "kakakaka" ); beanOne.put( "sex" , "男" ); beanOne.put( "age" , 20 ); baseDAOImpl.insert( "test" , beanOne); |
执行后结果
可以看到mongdb会自动检测是否存在数据库MongoDBTest,如果不存在则新建一个,然后再检测是否存在文档集合test,如果不存在则新建一个,最后插入数据。
4.2查询文档操作
1 2 3 4 5 6 | List<BasicDBObject> list = baseDAOImpl.find( "test" , new BasicDBObject( "name" , "kakakaka" )); for (BasicDBObject i : list){ System.out.println(i.get( "name" )); System.out.println(i.get( "sex" )); System.out.println(i.get( "age" )); } |
输出结果如下
1 2 3 | kakakaka 男 20 |
4.3修改文档操作如下
1 2 3 4 5 6 | BasicDBObject oldBean = (BasicDBObject) baseDAOImpl.find( "test" , new BasicDBObject( "name" , "kakakaka" )).get( 0 ); BasicDBObject newBean = (BasicDBObject) oldBean.clone(); newBean.put( "name" , "gugugugu" ); System.out.println(oldBean.get( "name" )); System.out.println(newBean.get( "name" )); baseDAOImpl.update( "test" , oldBean, newBean); |
控制台输出结果
1 2 | kakakaka gugugugu |
4.4删除文档
先再向数据库插入一条数据
注意,mongdb区分一个文档中的不同数据是依赖它自己向每条数据中赋的"_id"
所以再插入这样一条数据
1 2 3 4 5 6 | BaseDAOImpl baseDAOImpl = new BaseDAOImpl(); BasicDBObject beanOne = new BasicDBObject(); beanOne.put( "name" , "gugugugu" ); beanOne.put( "sex" , "男" ); beanOne.put( "age" , 20 ); baseDAOImpl.insert( "test" , beanOne); |
结果如下
执行删除操作
首先根据"_id"将文档中第二条数据修改
1 2 | baseDAOImpl.update( "test" , new BasicDBObject( "_id" , new ObjectId( "5471c9db44aeeb8b5524f2ea" )) , new BasicDBObject( "name" , "kakakaka" ).append( "age" , 20 )); |
结果如下
将"name" 等于 "kakakaka"的数据删除
1 | baseDAOImpl.delete( "test" , new BasicDBObject( "name" , "kakakaka" )); |
5.模糊搜索
使用正则表达式根据关键字key对数据库相应属性进行模糊搜索,
1 2 3 4 5 6 7 | String key = "a" ; Pattern pattern = Pattern.compile( "^.*" + key + ".*$" , Pattern.CASE_INSENSITIVE); DB db = MongoDBUtil.getDB(); List list = db.getCollection( "test" ).find( new BasicDBObject( "name" , pattern)).toArray(); for ( int i = 0 ; i < list.size();i++){ System.out.println(list.get(i)); } |
数据库内部的内容
输出结果
1 | { "_id" : { "$oid" : "547ebfc744aefdcc5fe90bce" } , "name" : "kakakaka" , "sex" : "男" , "age" : 20 } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 我干了两个月的大项目,开源了!
· 推荐一款非常好用的在线 SSH 管理工具
· 千万级的大表,如何做性能调优?
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· .NET周刊【1月第1期 2025-01-05】