您的位置:首页 > 数据库 > Mongodb

【MongoDB for Java】Java操作MongoDB

2013-05-18 13:05 274 查看
上一篇文章:http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过前一篇文章我们对MongoDB有了全面的认识和理解。现在我们就用Java来操作MongoDB的数据。
开发环境:

System:Windows

IDE:eclipse、MyEclipse8

Database:mongoDB

开发依赖库:

JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar

Email:hoojo_@126.com

Blog:http://blog.csdn.net/IBM_hoojo

http://hoojo.cnblogs.com/

一、准备工作

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数据库操作

Mongomongo=newMongo();

这样就创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017。

DBdb=mongo.getDB(“test”);

这样就获得了一个test的数据库,如果mongoDB中没有创建这个数据库也是可以正常运行的。如果你读过上一篇文章就知道,mongoDB可以在没有创建这个数据库的情况下,完成数据的添加操作。当添加的时候,没有这个库,mongoDB会自动创建当前数据库。

得到了db,下一步我们要获取一个“聚集集合DBCollection”,通过db对象的getCollection方法来完成。

DBCollectionusers=db.getCollection("users");

这样就获得了一个DBCollection,它相当于我们数据库的“表”。

查询所有数据

DBCursorcur=users.find();

while(cur.hasNext()){

System.out.println(cur.next());

}

完整源码

packagecom.hoo.test;


importjava.net.UnknownHostException;

importcom.mongodb.DB;

importcom.mongodb.DBCollection;

importcom.mongodb.DBCursor;

importcom.mongodb.Mongo;

importcom.mongodb.MongoException;

importcom.mongodb.util.JSON;


/**

*<b>function:</b>MongoDB简单示例

*@authorhoojo

*@createDate2011-5-24下午02:42:29

*@fileSimpleTest.java

*@packagecom.hoo.test

*@projectMongoDB

*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code]
*@emailhoojo_@126.com

*@version1.0

*/

publicclassSimpleTest{


publicstaticvoidmain(String[]args)throwsUnknownHostException,MongoException{

Mongomg=newMongo();

//查询所有的Database

for(Stringname:mg.getDatabaseNames()){

System.out.println("dbName:"+name);

}


DBdb=mg.getDB("test");

//查询所有的聚集集合

for(Stringname:db.getCollectionNames()){

System.out.println("collectionName:"+name);

}


DBCollectionusers=db.getCollection("users");


//查询所有的数据

DBCursorcur=users.find();

while(cur.hasNext()){

System.out.println(cur.next());

}

System.out.println(cur.count());

System.out.println(cur.getCursorId());

System.out.println(JSON.serialize(cur));

}

}


2、完成CRUD操作,首先建立一个MongoDB4CRUDTest.java,基本测试代码如下:

packagecom.hoo.test;


importjava.net.UnknownHostException;

importjava.util.ArrayList;

importjava.util.List;

importorg.bson.types.ObjectId;

importorg.junit.After;

importorg.junit.Before;

importorg.junit.Test;

importcom.mongodb.BasicDBObject;

importcom.mongodb.Bytes;

importcom.mongodb.DB;

importcom.mongodb.DBCollection;

importcom.mongodb.DBCursor;

importcom.mongodb.DBObject;

importcom.mongodb.Mongo;

importcom.mongodb.MongoException;

importcom.mongodb.QueryOperators;

importcom.mongodb.util.JSON;


/**

*<b>function:</b>实现MongoDB的CRUD操作

*@authorhoojo

*@createDate2011-6-2下午03:21:23

*@fileMongoDB4CRUDTest.java

*@packagecom.hoo.test

*@projectMongoDB

*@blog'target='_blank'>http://blog.csdn.net/IBM_hoojo[/code]
*@emailhoojo_@126.com

*@version1.0

*/

publicclassMongoDB4CRUDTest{


privateMongomg=null;

privateDBdb;

privateDBCollectionusers;


@Before

publicvoidinit(){

try{

mg=newMongo();

//mg=newMongo("localhost",27017);

}catch(UnknownHostExceptione){

e.printStackTrace();

}catch(MongoExceptione){

e.printStackTrace();

}

//获取tempDB;如果默认没有创建,mongodb会自动创建

db=mg.getDB("temp");

//获取usersDBCollection;如果默认没有创建,mongodb会自动创建

users=db.getCollection("users");

}


@After

publicvoiddestory(){

if(mg!=null)

mg.close();

mg=null;

db=null;

users=null;

System.gc();

}


publicvoidprint(Objecto){

System.out.println(o);

}

}


3、添加操作

在添加操作之前,我们需要写个查询方法,来查询所有的数据。代码如下:

/**

*<b>function:</b>查询所有数据

*@authorhoojo

*@createDate2011-6-2下午03:22:40

*/

privatevoidqueryAll(){

print("查询users的所有数据:");

//db游标

DBCursorcur=users.find();

while(cur.hasNext()){

print(cur.next());

}

}


@Test

publicvoidadd(){

//先查询所有数据

queryAll();

print("count:"+users.count());


DBObjectuser=newBasicDBObject();

user.put("name","hoojo");

user.put("age",24);

//users.save(user)保存,getN()获取影响行数

//print(users.save(user).getN());


//扩展字段,随意添加字段,不影响现有数据

user.put("sex","男");

print(users.save(user).getN());


//添加多条数据,传递Array对象

print(users.insert(user,newBasicDBObject("name","tom")).getN());


//添加List集合

List<DBObject>list=newArrayList<DBObject>();

list.add(user);

DBObjectuser2=newBasicDBObject("name","lucy");

user.put("age",22);

list.add(user2);

//添加List集合

print(users.insert(list).getN());


//查询下数据,看看是否添加成功

print("count:"+users.count());

queryAll();

}


4、删除数据

@Test

publicvoidremove(){

queryAll();

print("删除id=4de73f7acd812d61b4626a77:"+users.remove(newBasicDBObject("_id",newObjectId("4de73f7acd812d61b4626a77"))).getN());

print("removeage>=24:"+users.remove(newBasicDBObject("age",newBasicDBObject("$gte",24))).getN());

}


5、修改数据

@Test

publicvoidmodify(){

print("修改:"+users.update(newBasicDBObject("_id",newObjectId("4dde25d06be7c53ffbd70906")),newBasicDBObject("age",99)).getN());

print("修改:"+users.update(

newBasicDBObject("_id",newObjectId("4dde2b06feb038463ff09042")),

newBasicDBObject("age",121),

true,//如果数据库不存在,是否添加

false//多条修改

).getN());

print("修改:"+users.update(

newBasicDBObject("name","haha"),

newBasicDBObject("name","dingding"),

true,//如果数据库不存在,是否添加

true//false只修改第一天,true如果有多条就不修改

).getN());


//当数据库不存在就不修改、不添加数据,当多条数据就不修改

//print("修改多条:"+coll.updateMulti(newBasicDBObject("_id",newObjectId("4dde23616be7c19df07db42c")),newBasicDBObject("name","199")));

}


6、查询数据

@Test

publicvoidquery(){

//查询所有

//queryAll();


//查询id=4de73f7acd812d61b4626a77

print("findid=4de73f7acd812d61b4626a77:"+users.find(newBasicDBObject("_id",newObjectId("4de73f7acd812d61b4626a77"))).toArray());


//查询age=24

print("findage=24:"+users.find(newBasicDBObject("age",24)).toArray());


//查询age>=24

print("findage>=24:"+users.find(newBasicDBObject("age",newBasicDBObject("$gte",24))).toArray());

print("findage<=24:"+users.find(newBasicDBObject("age",newBasicDBObject("$lte",24))).toArray());


print("查询age!=25:"+users.find(newBasicDBObject("age",newBasicDBObject("$ne",25))).toArray());

print("查询agein25/26/27:"+users.find(newBasicDBObject("age",newBasicDBObject(QueryOperators.IN,newint[]{25,26,27}))).toArray());

print("查询agenotin25/26/27:"+users.find(newBasicDBObject("age",newBasicDBObject(QueryOperators.NIN,newint[]{25,26,27}))).toArray());

print("查询ageexists排序:"+users.find(newBasicDBObject("age",newBasicDBObject(QueryOperators.EXISTS,true))).toArray());


print("只查询age属性:"+users.find(null,newBasicDBObject("age",true)).toArray());

print("只查属性:"+users.find(null,newBasicDBObject("age",true),0,2).toArray());

print("只查属性:"+users.find(null,newBasicDBObject("age",true),0,2,Bytes.QUERYOPTION_NOTIMEOUT).toArray());


//只查询一条数据,多条去第一条

print("findOne:"+users.findOne());

print("findOne:"+users.findOne(newBasicDBObject("age",26)));

print("findOne:"+users.findOne(newBasicDBObject("age",26),newBasicDBObject("name",true)));


//查询修改、删除

print("findAndRemove查询age=25的数据,并且删除:"+users.findAndRemove(newBasicDBObject("age",25)));


//查询age=26的数据,并且修改name的值为Abc

print("findAndModify:"+users.findAndModify(newBasicDBObject("age",26),newBasicDBObject("name","Abc")));

print("findAndModify:"+users.findAndModify(

newBasicDBObject("age",28),//查询age=28的数据

newBasicDBObject("name",true),//查询name属性

newBasicDBObject("age",true),//按照age排序

false,//是否删除,true表示删除

newBasicDBObject("name","Abc"),//修改的值,将name修改成Abc

true,

true));


queryAll();

}


mongoDB不支持联合查询、子查询,这需要我们自己在程序中完成。将查询的结果集在Java查询中进行需要的过滤即可。

7、其他操作

publicvoidtestOthers(){

DBObjectuser=newBasicDBObject();

user.put("name","hoojo");

user.put("age",24);


//JSON对象转换

print("serialize:"+JSON.serialize(user));

//反序列化

print("parse:"+JSON.parse("{\"name\":\"hoojo\",\"age\":24}"));


print("判断tempCollection是否存在:"+db.collectionExists("temp"));


//如果不存在就创建

if(!db.collectionExists("temp")){

DBObjectoptions=newBasicDBObject();

options.put("size",20);

options.put("capped",20);

options.put("max",20);

print(db.createCollection("account",options));

}


//设置db为只读

db.setReadOnly(true);


//只读不能写入数据

db.getCollection("test").save(user);

}


好了,这里基本上就介绍这么多Java操作MongoDB的方法。其他的东西还需要你自己多多研究。上面操作MongoDB的方法都是一些常用的方法,比较简单。如果有什么问题,可以给我留言或是发Email:hoojo_@126.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MongoDB Java