mongodb java 学习_MongoDB学习(四):通过Java使用MongoDB

环境配置

在Java项目中使用MongoDB,需要在项目中引入mongo.jar这个包。下载地址:下载

请尽量下载较新的版本,本文用的是2.10.1。

连接MongoDB

1 public synchronized static DB getDBConnection() throwsUnknownHostException{2 if(db == null){3 MongoClient client = newMongoClient(DB_SERVER_IP, DBSERVER_PORT);4 db =client.getDB(DB_NAME);5 System.out.println("GET DBCONNECTION SUCCESSFUL");6 }7 returndb;8 }

其中IP和PORT分别是数据库服务端的IP和端口号。

创建集合

public staticDBCollection getCollection(String colName){

col=db.getCollection(colName);if(col == null){

col= db.createCollection(colName, null);

}returncol;

}

插入文档

插入数据有4中方式可选:1.利用DBObjcet,2.利用DBObjectBuilder, 3.先创建Map对象,再用Map对象构造DBObject,4.直接通过json对象创建。

这里我们主要介绍第一种方式——利用DBObject插入。DBObject是一个接口,继承自BSONObject,是可被存入数据库的一个键值的Map。这里我们使用它的基本实现:BasicDBObject。

public static voidinsert(){

DBCollection col= getCollection("myCollection1");if(col != null){

DBObject o= newBasicDBObject();

o.put("name", "Z");

o.put("gender", "f");

o.put("age", 1);

col.insert(o);

}

}

另外,你也可以使用BasicDBObject提供的append()函数,来为对象插入键值对。

当你需要批量插入数据时,可以使用DBCollection.insert(List list);

查询文档

可以通过DBCollection.find()来查询集合中的文档。该函数返回一个游标DBCursor。通过对其迭代输出,就可以得到文档组。或者是通过DBCursor.toArray()直接转成DBObject的列表List。代码如下:

public static voidsearch(){

DBCollection col= getCollection("myCollection1");if(col != null){

DBCursor cursor=col.find();while(cursor.hasNext()){

DBObject o=cursor.next();

System.out.println(o);

}

}

}

public static voidsearch(){

DBCollection col= getCollection("myCollection1");if(col != null){

List list =col.find().toArray();

}

}

当然,也可以设置查询条件,并对输出结果的字段进行限制:

public static voidsearch2(){

DBCollection col= getCollection("myCollection1");if(col != null){//查询条件

DBObject query = newBasicDBObject();

query.put("gender", "m");//输出结果是否有要输出某个字段。0表示不输出,1表示只输出该字段

DBObject field = newBasicDBObject();

field.put("name", 1);

DBCursor cursor=col.find(query,field);while(cursor.hasNext()){

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

}

}

}

上述代码就表示查询性别为m的全部文档,并输出其姓名。

较复杂的条件查询:

public static voidsearch2(){

DBCollection col= getCollection("myCollection1");if(col != null){//查询条件

DBObject query = newBasicDBObject();

DBObject o= new BasicDBObject("$lt",24).append("$gt", 21);

query.put("age", o);

DBCursor cursor=col.find(query);while(cursor.hasNext()){

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

}

}

}

这里我们筛选的是年龄小于24且大于21的全部文档。

更新文档

public static voidupdate1(){

DBCollection col= getCollection("myCollection1");if(col != null){//查询条件

DBObject query = newBasicDBObject();

query.put("name", "A");//用来替换的文档

DBObject newObject = newBasicDBObject();

newObject.put("name", "A1");

col.update(query, newObject);

}

}

这里我们将name这个字段等于A的文档替换成了name字段为A1的值,注意的是,新的文档将不包含旧文档的其他字段,是真正意义上的两个文档的替换,而非替换相同字段!另外一点需要注意的是,该方法只替换第一条符合查询条件的文档。因为multi的默认值为false,可以通过设置这个值为true来修改多条。

findAndModity(DBObject query,  DBObject  fields, DBObject sort,  boolean remove, DBObject update,boolean returnNew,boolean upsert)也提供了类似的功能。

query - query to match

fields - fields to be returned

sort - sort to apply before picking first document

remove - if true, document found will be removed

update - update to apply

returnNew - if true, the updated document is returned, otherwise the old document is returned (or it would be lost forever)upsert - do upsert (insert if document not present)

删除文档

删除指定的一个文档:

public static voidremove1(){

DBCollection col= getCollection("myCollection1");if(col != null){

DBObject o=col.findOne();

col.remove(o);

}

}

删除符合某条件的文档:

public static voidremove2(){

DBCollection col= getCollection("myCollection1");if(col != null){//条件

DBObject query = newBasicDBObject();

query.put("name", "A1");

col.remove(query);

}

}

会删除符合条件的全部文档。

如需要删除集合下的全部文档时,可结合DBCursor实现。

参考:

其他资料:菜鸟教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值