moogdb操作
本文转载自 https://my.oschina.net/kakakaka/blog/347954
首先,下载mongdb对JAVA的支持,点击这里下载驱动包,这里博主下载的是2.10.1版。
mongdb版本为2.4.9
在项目中导入该驱动包。
打开shell,在终端输入mongo,显示如下
只有默认的三个数据库。
新建一个java project
代码如下,
1.操控mongdb连接,使用MongoOptions来设置一些参数。
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.基本操作接口
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.基本操作实现
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添加文档操作
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查询文档操作
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"));
}
输出结果如下
kakakaka
男
20
4.3修改文档操作如下
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);
控制台输出结果
kakakaka
gugugugu
4.4删除文档
先再向数据库插入一条数据
注意,mongdb区分一个文档中的不同数据是依赖它自己向每条数据中赋的"_id"
所以再插入这样一条数据
BaseDAOImpl baseDAOImpl = new BaseDAOImpl();
BasicDBObject beanOne = new BasicDBObject();
beanOne.put("name", "gugugugu");
beanOne.put("sex", "男");
beanOne.put("age", 20);
baseDAOImpl.insert("test", beanOne);
结果如下
执行删除操作
首先根据"_id"将文档中第二条数据修改
baseDAOImpl.update("test", new BasicDBObject("_id", new ObjectId("5471c9db44aeeb8b5524f2ea"))
, new BasicDBObject("name","kakakaka").append("age", 20));
结果如下
将"name" 等于 "kakakaka"的数据删除
baseDAOImpl.delete("test", new BasicDBObject("name","kakakaka"));
5.模糊搜索
使用正则表达式根据关键字key对数据库相应属性进行模糊搜索,
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));
}
数据库内部的内容
输出结果
{ "_id" : { "$oid" : "547ebfc744aefdcc5fe90bce"} , "name" : "kakakaka" , "sex" : "男" , "age" : 20}
moogdb操作的更多相关文章
- 关于DOM的操作以及性能优化问题-重绘重排
写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...
- Sql Server系列:分区表操作
1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...
- C# ini文件操作【源码下载】
介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...
- js学习笔记:操作iframe
iframe可以说是比较老得话题了,而且网上也基本上在说少用iframe,其原因大致为:堵塞页面加载.安全问题.兼容性问题.搜索引擎抓取不到等等,不过相对于这些缺点,iframe的优点更牛,跨域请求. ...
- jquery和Js的区别和基础操作
jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...
- ASP.NET Aries 入门开发教程7:DataGrid的行操作(主键操作区)
前言: 抓紧勤奋,再接再励,预计共10篇来结束这个系列. 上一篇介绍:ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑 本篇介绍主键操作区相关内容. 1:什么时候有默认的 ...
- 如何在高并发环境下设计出无锁的数据库操作(Java版本)
一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
随机推荐
- 如何对Linux内核参数进行优化?
打开配置文件 vi /etc/sysctl.conf 输入配置,如下是内核优化的参数 # TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为1024(将其设置得大一些可以使出现Nginx繁忙来 ...
- Django 开发相关知识 整理
前言 前端ajax HTTP请求头 ajax上传文件 jsonp跨域 URL 设计 分发 url参数编码 反向生成url 视图 request对象 POST url信息 视图返回值 HttpRespo ...
- 阿里P8架构师总结Java并发面试题(精选)
一.什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一 ...
- Linux基础篇之FTP服务器搭建(一)
一.配置网络可以访问互联网(没有条件的可以提前下载相关版本的依赖包(也叫安装包,以下统称依赖包)上传到系统中也可以). 二.检查系统中是否存在相关的依赖包. 没有返回信息,说明系统中不存在相关的依赖包 ...
- idou老师教你学Istio05: 如何用Isito实现智能路由配置
要介绍istio请求路由,我们不由得先从pilot 和 envoy开始谈起. 在服务网格中,Pilot管理和配置所有的envoy实例.在pilot中,你几乎可以配置所有的关于流量导向规则及其他故障恢复 ...
- 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)
牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...
- gerapy+scrapyd组合管理分布式爬虫
Scrapyd是一款用于管理scrapy爬虫的部署和运行的服务,提供了HTTP JSON形式的API来完成爬虫调度涉及的各项指令.Scrapyd是一款开源软件,代码托管于Github上. 点击此链接h ...
- new函数
可以通过new函数直接创建一个类型的指针 变量名:=new(Type) 使用new函数创建的指针已有指向,可以使用*指针对象进行赋值. func main() { a := new(int) fmt. ...
- CodeForces 837D - Round Subset | Educational Codeforces Round 26
/* CodeForces 837D - Round Subset [ DP ] | Educational Codeforces Round 26 题意: 选k个数相乘让末尾0最多 分析: 第i个数 ...
- mysql 指令
// 授予用户某些权限GRANT ALL ON *.* TO 'USER'@'HOST';// 进入mysql访问特定数据库mysql -u user -p database_name// 查看数据表 ...