- 浏览: 132102 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (68)
- EJB3 (1)
- JPA (1)
- Java IDE工具 (1)
- Struts 2.x (2)
- Ant&ivy (0)
- Maven (1)
- Hibernate (0)
- Spring (4)
- Java Web技术 (0)
- Oracle 10g + (3)
- JDK1.5+ (10)
- Java EE容器 (1)
- 设计模式 (1)
- Junit (0)
- 邮件协议 (1)
- BlockingQueue---DelayQueue (1)
- Mongodb (3)
- Spring中的destroy-method (1)
- Linux&Unix (6)
- JAVA (16)
- RabbitMQ (2)
- 操作系统 (1)
- 开源项目 (5)
- spring 4 (1)
- ZooKeeper (1)
- JVM (2)
- DDD (1)
最新评论
【MongoDB for Java】Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过前一篇文章我们对MongoDB有了全面的认识和理解。现在我们就用Java来操作MongoDB的数据。
开发环境:
System:Windows
IDE:eclipse、MyEclipse 8
Database:mongoDB
开发依赖库:
JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar
Email:hoojo_@126.com
Blog:http://blog.csdn.net/IBM_hoojo
一、准备工作
1、 首先,下载mongoDB对Java支持的驱动包
驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads
mongoDB对Java的相关支持、技术:http://www.mongodb.org/display/DOCS/Java+Language+Center
驱动源码下载:https://download.github.com/mongodb-mongo-java-driver-r2.6.1-7-g6037357.zip
在线查看源码:https://github.com/mongodb/mongo-java-driver
2、 下面建立一个JavaProject工程,导入下载下来的驱动包。即可在Java中使用mongoDB,目录如下:
二、Java操作MongoDB示例
在本示例之前你需要启动mongod.exe的服务,启动后,下面的程序才能顺利执行;
1、 建立SimpleTest.java,完成简单的mongoDB数据库操作
Mongo mongo = new Mongo();
这样就创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017。
DB db = mongo.getDB(“test”);
这样就获得了一个test的数据库,如果mongoDB中没有创建这个数据库也是可以正常运行的。如果你读过上一篇文章就知道,mongoDB可以在没有创建这个数据库的情况下,完成数据的添加操作。当添加的时候,没有这个库,mongoDB会自动创建当前数据库。
得到了db,下一步我们要获取一个“聚集集合DBCollection”,通过db对象的getCollection方法来完成。
DBCollection users = db.getCollection("users");
这样就获得了一个DBCollection,它相当于我们数据库的“表”。
查询所有数据
DBCursor cur = users.find();
while (cur.hasNext()) {
System.out.println(cur.next());
}
完整源码
package com.hoo.test;
<!--CRLF-->
<!--CRLF-->
import java.net.UnknownHostException;
<!--CRLF-->
import com.mongodb.DB;
<!--CRLF-->
import com.mongodb.DBCollection;
<!--CRLF-->
import com.mongodb.DBCursor;
<!--CRLF-->
import com.mongodb.Mongo;
<!--CRLF-->
import com.mongodb.MongoException;
<!--CRLF-->
import com.mongodb.util.JSON;
<!--CRLF-->
<!--CRLF-->
/**
<!--CRLF-->
* <b>function:</b>MongoDB 简单示例
<!--CRLF-->
* @author hoojo
<!--CRLF-->
* @createDate 2011-5-24 下午02:42:29
<!--CRLF-->
* @file SimpleTest.java
<!--CRLF-->
* @package com.hoo.test
<!--CRLF-->
* @project MongoDB
<!--CRLF-->
* @blog http://blog.csdn.net/IBM_hoojo
<!--CRLF-->
* @email hoojo_@126.com
<!--CRLF-->
* @version 1.0
<!--CRLF-->
*/
<!--CRLF-->
public class SimpleTest {<!--CRLF-->
<!--CRLF-->
public static void main(String[] args) throws UnknownHostException, MongoException {<!--CRLF-->
Mongo mg = new Mongo();
<!--CRLF-->
//查询所有的Database
<!--CRLF-->
for (String name : mg.getDatabaseNames()) {
<!--CRLF-->
System.out.println("dbName: " + name);
<!--CRLF-->
}<!--CRLF-->
<!--CRLF-->
DB db = mg.getDB("test");
<!--CRLF-->
//查询所有的聚集集合
<!--CRLF-->
for (String name : db.getCollectionNames()) {
<!--CRLF-->
System.out.println("collectionName: " + name);
<!--CRLF-->
}<!--CRLF-->
<!--CRLF-->
DBCollection users = db.getCollection("users");
<!--CRLF-->
<!--CRLF-->
//查询所有的数据
<!--CRLF-->
DBCursor cur = users.find();<!--CRLF-->
while (cur.hasNext()) {
<!--CRLF-->
System.out.println(cur.next());<!--CRLF-->
}<!--CRLF-->
System.out.println(cur.count());<!--CRLF-->
System.out.println(cur.getCursorId());<!--CRLF-->
System.out.println(JSON.serialize(cur));<!--CRLF-->
}<!--CRLF-->
}<!--CRLF-->
2、 完成CRUD操作,首先建立一个MongoDB4CRUDTest.java,基本测试代码如下:
package com.hoo.test;
<!--CRLF-->
<!--CRLF-->
import java.net.UnknownHostException;
<!--CRLF-->
import java.util.ArrayList;
<!--CRLF-->
import java.util.List;
<!--CRLF-->
import org.bson.types.ObjectId;
<!--CRLF-->
import org.junit.After;
<!--CRLF-->
import org.junit.Before;
<!--CRLF-->
import org.junit.Test;
<!--CRLF-->
import com.mongodb.BasicDBObject;
<!--CRLF-->
import com.mongodb.Bytes;
<!--CRLF-->
import com.mongodb.DB;
<!--CRLF-->
import com.mongodb.DBCollection;
<!--CRLF-->
import com.mongodb.DBCursor;
<!--CRLF-->
import com.mongodb.DBObject;
<!--CRLF-->
import com.mongodb.Mongo;
<!--CRLF-->
import com.mongodb.MongoException;
<!--CRLF-->
import com.mongodb.QueryOperators;
<!--CRLF-->
import com.mongodb.util.JSON;
<!--CRLF-->
<!--CRLF-->
/**
<!--CRLF-->
* <b>function:</b>实现MongoDB的CRUD操作
<!--CRLF-->
* @author hoojo
<!--CRLF-->
* @createDate 2011-6-2 下午03:21:23
<!--CRLF-->
* @file MongoDB4CRUDTest.java
<!--CRLF-->
* @package com.hoo.test
<!--CRLF-->
* @project MongoDB
<!--CRLF-->
* @blog http://blog.csdn.net/IBM_hoojo
<!--CRLF-->
* @email hoojo_@126.com
<!--CRLF-->
* @version 1.0
<!--CRLF-->
*/
<!--CRLF-->
public class MongoDB4CRUDTest {<!--CRLF-->
<!--CRLF-->
private Mongo mg = null;
<!--CRLF-->
private DB db;
<!--CRLF-->
private DBCollection users;
<!--CRLF-->
<!--CRLF-->
@Before<!--CRLF-->
public void init() {<!--CRLF-->
try {
<!--CRLF-->
mg = new Mongo();
<!--CRLF-->
//mg = new Mongo("localhost", 27017);
<!--CRLF-->
} catch (UnknownHostException e) {
<!--CRLF-->
e.printStackTrace();<!--CRLF-->
} catch (MongoException e) {
<!--CRLF-->
e.printStackTrace();<!--CRLF-->
}<!--CRLF-->
//获取temp DB;如果默认没有创建,mongodb会自动创建
<!--CRLF-->
db = mg.getDB("temp");
<!--CRLF-->
//获取users DBCollection;如果默认没有创建,mongodb会自动创建
<!--CRLF-->
users = db.getCollection("users");
<!--CRLF-->
}<!--CRLF-->
<!--CRLF-->
@After<!--CRLF-->
public void destory() {<!--CRLF-->
if (mg != null)
<!--CRLF-->
mg.close();<!--CRLF-->
mg = null;<!--CRLF-->
db = null;<!--CRLF-->
users = null;<!--CRLF-->
System.gc();<!--CRLF-->
}<!--CRLF-->
<!--CRLF-->
public void print(Object o) {<!--CRLF-->
System.out.println(o);<!--CRLF-->
}<!--CRLF-->
}<!--CRLF-->
3、 添加操作
在添加操作之前,我们需要写个查询方法,来查询所有的数据。代码如下:
/**
<!--CRLF-->
* <b>function:</b> 查询所有数据
<!--CRLF-->
* @author hoojo
<!--CRLF-->
* @createDate 2011-6-2 下午03:22:40
<!--CRLF-->
*/
<!--CRLF-->
private void queryAll() {<!--CRLF-->
print("查询users的所有数据:");
<!--CRLF-->
//db游标
<!--CRLF-->
DBCursor cur = users.find();<!--CRLF-->
while (cur.hasNext()) {
<!--CRLF-->
print(cur.next());<!--CRLF-->
}<!--CRLF-->
}<!--CRLF-->
<!--CRLF-->
@Test<!--CRLF-->
public void add() {<!--CRLF-->
//先查询所有数据
<!--CRLF-->
queryAll();<!--CRLF-->
print("count: " + users.count());
<!--CRLF-->
<!--CRLF-->
DBObject user = new BasicDBObject();
<!--CRLF-->
user.put("name", "hoojo");<!--CRLF-->
user.put("age", 24);
<!--CRLF-->
//users.save(user)保存,getN()获取影响行数
<!--CRLF-->
//print(users.save(user).getN());
<!--CRLF-->
<!--CRLF-->
//扩展字段,随意添加字段,不影响现有数据
<!--CRLF-->
user.put("sex", "男");<!--CRLF-->
print(users.save(user).getN());<!--CRLF-->
<!--CRLF-->
//添加多条数据,传递Array对象
<!--CRLF-->
print(users.insert(user, new BasicDBObject("name", "tom")).getN());<!--CRLF-->
<!--CRLF-->
//添加List集合
<!--CRLF-->
List<DBObject> list = new ArrayList<DBObject>();
<!--CRLF-->
list.add(user);<!--CRLF-->
DBObject user2 = new BasicDBObject("name", "lucy");<!--CRLF-->
user.put("age", 22);
<!--CRLF-->
list.add(user2);<!--CRLF-->
//添加List集合
<!--CRLF-->
print(users.insert(list).getN());<!--CRLF-->
<!--CRLF-->
//查询下数据,看看是否添加成功
<!--CRLF-->
print("count: " + users.count());
<!--CRLF-->
queryAll();<!--CRLF-->
}<!--CRLF-->
4、 删除数据
@Test<!--CRLF-->
public void remove() {<!--CRLF-->
queryAll();<!--CRLF-->
print("删除id = 4de73f7acd812d61b4626a77:" + users.remove(new BasicDBObject("_id", new ObjectId("4de73f7acd812d61b4626a77"))).getN());<!--CRLF-->
print("remove age >= 24: " + users.remove(new BasicDBObject("age", new BasicDBObject("$gte", 24))).getN());<!--CRLF-->
}<!--CRLF-->
5、 修改数据
@Test<!--CRLF-->
public void modify() {<!--CRLF-->
print("修改:" + users.update(new BasicDBObject("_id", new ObjectId("4dde25d06be7c53ffbd70906")), new BasicDBObject("age", 99)).getN());<!--CRLF-->
print("修改:" + users.update(
<!--CRLF-->
new BasicDBObject("_id", new ObjectId("4dde2b06feb038463ff09042")),<!--CRLF-->
new BasicDBObject("age", 121),<!--CRLF-->
true,//如果数据库不存在,是否添加
<!--CRLF-->
false//多条修改
<!--CRLF-->
).getN());<!--CRLF-->
print("修改:" + users.update(
<!--CRLF-->
new BasicDBObject("name", "haha"),<!--CRLF-->
new BasicDBObject("name", "dingding"),<!--CRLF-->
true,//如果数据库不存在,是否添加
<!--CRLF-->
true//false只修改第一天,true如果有多条就不修改
<!--CRLF-->
).getN());<!--CRLF-->
<!--CRLF-->
//当数据库不存在就不修改、不添加数据,当多条数据就不修改
<!--CRLF-->
//print("修改多条:" + coll.updateMulti(new BasicDBObject("_id", new ObjectId("4dde23616be7c19df07db42c")), new BasicDBObject("name", "199")));
<!--CRLF-->
}<!--CRLF-->
6、 查询数据
@Test<!--CRLF-->
public void query() {<!--CRLF-->
//查询所有
<!--CRLF-->
//queryAll();
<!--CRLF-->
<!--CRLF-->
//查询id = 4de73f7acd812d61b4626a77
<!--CRLF-->
print("find id = 4de73f7acd812d61b4626a77: " + users.find(new BasicDBObject("_id", new ObjectId("4de73f7acd812d61b4626a77"))).toArray());<!--CRLF-->
<!--CRLF-->
//查询age = 24
<!--CRLF-->
print("find age = 24: " + users.find(new BasicDBObject("age", 24)).toArray());<!--CRLF-->
<!--CRLF-->
//查询age >= 24
<!--CRLF-->
print("find age >= 24: " + users.find(new BasicDBObject("age", new BasicDBObject("$gte", 24))).toArray());<!--CRLF-->
print("find age <= 24: " + users.find(new BasicDBObject("age", new BasicDBObject("$lte", 24))).toArray());<!--CRLF-->
<!--CRLF-->
print("查询age!=25:" + users.find(new BasicDBObject("age", new BasicDBObject("$ne", 25))).toArray());<!--CRLF-->
print("查询age in 25/26/27:" + users.find(new BasicDBObject("age", new BasicDBObject(QueryOperators.IN, new int[] { 25, 26, 27 }))).toArray());<!--CRLF-->
print("查询age not in 25/26/27:" + users.find(new BasicDBObject("age", new BasicDBObject(QueryOperators.NIN, new int[] { 25, 26, 27 }))).toArray());<!--CRLF-->
print("查询age exists 排序:" + users.find(new BasicDBObject("age", new BasicDBObject(QueryOperators.EXISTS, true))).toArray());<!--CRLF-->
<!--CRLF-->
print("只查询age属性:" + users.find(null, new BasicDBObject("age", true)).toArray());<!--CRLF-->
print("只查属性:" + users.find(null, new BasicDBObject("age", true), 0, 2).toArray());<!--CRLF-->
print("只查属性:" + users.find(null, new BasicDBObject("age", true), 0, 2, Bytes.QUERYOPTION_NOTIMEOUT).toArray());<!--CRLF-->
<!--CRLF-->
//只查询一条数据,多条去第一条
<!--CRLF-->
print("findOne: " + users.findOne());
<!--CRLF-->
print("findOne: " + users.findOne(new BasicDBObject("age", 26)));<!--CRLF-->
print("findOne: " + users.findOne(new BasicDBObject("age", 26), new BasicDBObject("name", true)));<!--CRLF-->
<!--CRLF-->
//查询修改、删除
<!--CRLF-->
print("findAndRemove 查询age=25的数据,并且删除: " + users.findAndRemove(new BasicDBObject("age", 25)));<!--CRLF-->
<!--CRLF-->
//查询age=26的数据,并且修改name的值为Abc
<!--CRLF-->
print("findAndModify: " + users.findAndModify(new BasicDBObject("age", 26), new BasicDBObject("name", "Abc")));<!--CRLF-->
print("findAndModify: " + users.findAndModify(
<!--CRLF-->
new BasicDBObject("age", 28), //查询age=28的数据<!--CRLF-->
new BasicDBObject("name", true), //查询name属性<!--CRLF-->
new BasicDBObject("age", true), //按照age排序<!--CRLF-->
false, //是否删除,true表示删除
<!--CRLF-->
new BasicDBObject("name", "Abc"), //修改的值,将name修改成Abc<!--CRLF-->
true,<!--CRLF-->
true));<!--CRLF-->
<!--CRLF-->
queryAll();<!--CRLF-->
}<!--CRLF-->
mongoDB不支持联合查询、子查询,这需要我们自己在程序中完成。将查询的结果集在Java查询中进行需要的过滤即可。
7、 其他操作
public void testOthers() {<!--CRLF-->
DBObject user = new BasicDBObject();
<!--CRLF-->
user.put("name", "hoojo");<!--CRLF-->
user.put("age", 24);
<!--CRLF-->
<!--CRLF-->
//JSON 对象转换
<!--CRLF-->
print("serialize: " + JSON.serialize(user));
<!--CRLF-->
//反序列化
<!--CRLF-->
print("parse: " + JSON.parse("{ \"name\" : \"hoojo\" , \"age\" : 24}"));<!--CRLF-->
<!--CRLF-->
print("判断temp Collection是否存在: " + db.collectionExists("temp"));<!--CRLF-->
<!--CRLF-->
//如果不存在就创建
<!--CRLF-->
if (!db.collectionExists("temp")) {<!--CRLF-->
DBObject options = new BasicDBObject();
<!--CRLF-->
options.put("size", 20);
<!--CRLF-->
options.put("capped", 20);
<!--CRLF-->
options.put("max", 20);
<!--CRLF-->
print(db.createCollection("account", options));
<!--CRLF-->
}<!--CRLF-->
<!--CRLF-->
//设置db为只读
<!--CRLF-->
db.setReadOnly(true);<!--CRLF-->
<!--CRLF-->
//只读不能写入数据
<!--CRLF-->
db.getCollection("test").save(user);
<!--CRLF-->
}<!--CRLF-->
好了,这里基本上就介绍这么多Java操作MongoDB的方法。其他的东西还需要你自己多多研究。上面操作MongoDB的方法都是一些常用的方法,比较简单。如果有什么问题,可以给我留言或是发Email:hoojo_@126.com
版权所有,转载请注明出处 本文出自: http://www.cnblogs.com/hoojo/archive/2011/06/02/2068665.html
相关推荐
MongoDB for Java Developers Design, build, and deliver efficient Java applications using the most advanced NoSQL database
mongodb for java api 英文版
MongoDB Java操作大全 源代码 实例
mongodb-java-driver-4.4.0.jar
MongoDB应用 Java应用 纯java mongodb操作 mongodb 通用dao
MongoDB for Java Developers的随书阅读代码,记录了整本书的大部分案例代码,下载即可运行!
MongoDB实现增删改查,java程序驱动,复杂查询,源代码示例
mongodb_java_driver 已经验证可用!
mongodb driver java 源码 2.5.3 版本
Mongodb 数据库 JAVA 增删改查操作例子
MongoDB Java Driver 简单操作
MongoDB的Java驱动包 。3.8版本,MongoDB官网https://www.mongodb.com/
java操作mongoDB的源文件,很齐全的哦
MongoDB、Java与对象关系映射 MongoDB、Java与对象关系映射
亲测可用,解压包含三个jar包,引用时sources和doc包根据需要添加。 mongo-java-driver-3.5.0.jar; mongo-java-driver-3.5.0-javadoc.jar; mongo-java-driver-3.5.0-sources.jar;
Java操作MongoDB实例,压缩包内为完整项目源码,使用MyEclipse软件 见文:https://blog.csdn.net/qq_33427869/article/details/87270444
MongoDBjava各版本驱动下载
本篇文章现在我们就用Java来操作MongoDB的数据。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
The NoSQL movement is growing in relevance, attracting more and more developers....By the end of this book, you will know everything you need to integrate MongoDB in your Java applications
MongoDB之Java使用例子,详细的增删改查例子,以及图片保存删除查询等~