Java驱动程序是MongoDB最早的驱动,已用于生产环境很长时间,十分稳定。可以到MongoDB官方网站下载驱动,驱动版本为2.9.0。
这个jar文件中,有两个包,我们会经常用到com.mongodb 和 com.mongodb.gridfs 。在Java中操作MongoDB,各种概念和shell中类似,几乎所有的方法名也都一致,我们先看个简单的例子吧:
packagecn.test;importjava.net.UnknownHostException;importcom.mongodb.BasicDBObject;importcom.mongodb.DB;importcom.mongodb.DBCollection;importcom.mongodb.DBObject;importcom.mongodb.Mongo;public classTest {public static void main(String[] args) throwsUnknownHostException {/*** Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017.*/Mongo connection= new Mongo("localhost:20000");/*** DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个*/DB db= connection.getDB("mylearndb");/*** DBCollection代表集合,如果数据库中没有该集合,会默认创建一个*/DBCollection users= db.getCollection("users");/*** DBObject代表文档,这是一个接口,java中提供了多种实现,最简单的就是BasicDBObject了*/DBObject user= newBasicDBObject();
user.put("name", "jimmy");
user.put("age", "34");
DBObject address= newBasicDBObject();
address.put("city", "bj");
address.put("street", "bq road");
address.put("mail", "ufpark 68#");/*** 对于内嵌文档,我们需要先将内嵌文档填充后,再填充到外层文档中!*/user.put("address", address);//将该文档插入到集合中
users.insert(user);//从集合中查询数据,我们就查询一条,调用findOne即可
DBObject dbUser =users.findOne();
System.out.println("name" + " : " + dbUser.get("name") );
System.out.println("age" + " : " + dbUser.get("age") );
DBObject dbAddress= (DBObject)user.get("address");
System.out.println("city" + " : " + dbAddress.get("city") );
System.out.println("street" + " : " + dbAddress.get("street") );
System.out.println("mail" + " : " + dbAddress.get("mail") );
}
}
输出结果为:
name : jimmy
age :34city : bj
street : bq road
mail : ufpark68#
从上述例子,我们可以看出,利用Java驱动操作MongoDB和shell中操作方式是十分相似的。
我们这里稍微提一下上面注释中,解释的文档类。Java驱动中文档必须是DBObject接口类型,这个接口可以认为是一个有序地java.util.Map。Java驱动中有提供了很多实现,我们上例中采用了最简单的BasicDBObject。
【向集合中保存数组】
MongoDB集合中的键值对的值支持数组,在shell中,我们通过[],来表示数组,那Java驱动中如何表示数组呢?在Java驱动中,java.util.List类型的对象,都可以表示MongoDB中的数组!我们看一个例子:
1 packagecn.test;2
3 importjava.net.UnknownHostException;4 importjava.util.ArrayList;5 importjava.util.List;6
7 importcom.mongodb.BasicDBObject;8 importcom.mongodb.BasicDBObjectBuilder;9 importcom.mongodb.DB;10 importcom.mongodb.DBCollection;11 importcom.mongodb.DBObject;12 importcom.mongodb.Mongo;13
14 public classTest1 {15
16 public static void main(String[] args) throwsUnknownHostException {17
18 /**
19 * Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017.20 */
21 Mongo connection = new Mongo("localhost:20000");22 /**
23 * DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个24 */
25 DB db = connection.getDB("mylearndb");26 /**
27 * DBCollection代表集合,如果数据库中没有该集合,会默认创建一个28 */
29 DBCollection fruitShop = db.getCollection("fruitshop");30 /**
31 * 创建水果店文档对象32 */
33 DBObject shop1 = newBasicDBObject();34 shop1.put("name", "The Fruit King");35 /**
36 * 水果店内水果保存在一个内嵌文档的数组中,格式为:37 * [{"name" : "apple", "quality" : "good", "price" : "5.6"},38 * {"name" : "orange", "quality" : "normal", "price" : "1.5"},39 * ......]40 */
41 //数组通过List表示
42 List fruits = new ArrayList();43 //数组中的每一个文档,我们通过BasicDBObjectBuilder来构造
44 fruits.add(BasicDBObjectBuilder.start().add("name", "apple").add("quality", "good").add("price", "5.6").get());45 fruits.add(BasicDBObjectBuilder.start().add("name", "orange").add("quality", "normal").add("price", "1.5").get());46 shop1.put("fruits", fruits);47
48 fruitShop.insert(shop1);49
50 }51
52 }
我们通过Shell连接到数据库上,直观地看看数据库中集合内的数据:
1 >use mylearndb;2 switched to db mylearndb3 >db.fruitshop.find();4 { "_id" : ObjectId("504c26fed9005e6e410c5979"), "name" : "The Fruit King", "frui5 ts" : [ { "name" : "apple", "quality" : "good", "price"
6 : "5.6" }, { "name" : "orange", "quality" : "normal", "price"
7 : "1.5"} ] }8 >
以上就是利用Java驱动操作MongoDB的一个简单示例,使用Java驱动操作MongoDB很简单,大家实际使用中对于API可以参照MongoDB提供的官方文档。
下面的链接就是2.9.0版驱动对应的API文档:
参考链接: