学习MongoDB--(11):应用举例(利用java操作MongoDB)

原文地址:http://blog.csdn.net/drifterj/article/details/7948090

目录地址:http://blog.csdn.net/DrifterJ/article/category/1191327/2

前面我们都是通过shell来操作存取MongoDB的数据,shell中使用的语言就是javascript。我们这次说一下如何通过Java来访问操作MongoDB数据库的。

Java驱动程序是MongoDB最早的驱动,已用于生产环境很长时间,十分稳定。可以到MongoDB官方网站下载驱动,我的资源中也有,驱动版本为2.9.0。

这个jar文件中,有两个包,我们会经常用到com.mongodb 和 com.mongodb.gridfs 。在Java中操作MongoDB,各种概念和shell中类似,几乎所有的方法名也都一致,我们先看个简单的例子吧:

  1. package cn.test;
  2. import java.net.UnknownHostException;
  3. import com.mongodb.BasicDBObject;
  4. import com.mongodb.DB;
  5. import com.mongodb.DBCollection;
  6. import com.mongodb.DBObject;
  7. import com.mongodb.Mongo;
  8. public class Test {
  9. public static void main(String[] args) throws UnknownHostException {
  10. /**
  11. * Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017.
  12. */
  13. Mongo connection = new Mongo("localhost:20000");
  14. /**
  15. * DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个
  16. */
  17. DB db = connection.getDB("mylearndb");
  18. /**
  19. * DBCollection代表集合,如果数据库中没有该集合,会默认创建一个
  20. */
  21. DBCollection users = db.getCollection("users");
  22. /**
  23. * DBObject代表文档,这是一个接口,java中提供了多种实现,最简单的就是BasicDBObject了
  24. */
  25. DBObject user = new BasicDBObject();
  26. user.put("name", "jimmy");
  27. user.put("age", "34");
  28. DBObject address = new BasicDBObject();
  29. address.put("city", "bj");
  30. address.put("street", "bq road");
  31. address.put("mail", "ufpark 68#");
  32. /**
  33. * 对于内嵌文档,我们需要先将内嵌文档填充后,再填充到外层文档中!
  34. */
  35. user.put("address", address);
  36. // 将该文档插入到集合中
  37. users.insert(user);
  38. // 从集合中查询数据,我们就查询一条,调用findOne即可
  39. DBObject dbUser = users.findOne();
  40. System.out.println("name" + " : "  + dbUser.get("name") );
  41. System.out.println("age" + " : "  + dbUser.get("age") );
  42. DBObject dbAddress = (DBObject)user.get("address");
  43. System.out.println("city" + " : "  + dbAddress.get("city") );
  44. System.out.println("street" + " : "  + dbAddress.get("street") );
  45. System.out.println("mail" + " : "  + dbAddress.get("mail") );
  46. }
  47. }

输出结果为:

  1. name : jimmy
  2. age : 34
  3. city : bj
  4. street : bq road
  5. mail : ufpark 68#

从上述例子,我们可以看出,利用Java驱动操作MongoDB和shell中操作方式是十分相似的,Java中操作更具有OO的特征。

我们这里稍微提一下上面注释中,解释的文档类。Java驱动中文档必须是DBObject接口类型,这个接口可以认为是一个有序地java.util.Map。Java驱动中有提供了很多实现,我们上例中采用了最简单的BasicDBObject。

【向集合中保存数组】

MongoDB集合中的键值对的值支持数组,在shell中,我们通过[],来表示数组,那Java驱动中如何表示数组呢?在Java驱动中,java.util.List类型的对象,都可以表示MongoDB中的数组!我们看一个例子:

  1. package cn.test;
  2. import java.net.UnknownHostException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import com.mongodb.BasicDBObject;
  6. import com.mongodb.BasicDBObjectBuilder;
  7. import com.mongodb.DB;
  8. import com.mongodb.DBCollection;
  9. import com.mongodb.DBObject;
  10. import com.mongodb.Mongo;
  11. public class Test1 {
  12. public static void main(String[] args) throws UnknownHostException {
  13. /**
  14. * Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017.
  15. */
  16. Mongo connection = new Mongo("localhost:20000");
  17. /**
  18. * DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个
  19. */
  20. DB db = connection.getDB("mylearndb");
  21. /**
  22. * DBCollection代表集合,如果数据库中没有该集合,会默认创建一个
  23. */
  24. DBCollection fruitShop = db.getCollection("fruitshop");
  25. /**
  26. *  创建水果店文档对象
  27. */
  28. DBObject shop1 = new BasicDBObject();
  29. shop1.put("name", "The Fruit King");
  30. /**
  31. *  水果店内水果保存在一个内嵌文档的数组中,格式为:
  32. *  [{"name" : "apple", "quality" : "good", "price" : "5.6"},
  33. *   {"name" : "orange", "quality" : "normal", "price" : "1.5"},
  34. *   ......]
  35. */
  36. // 数组通过List表示
  37. List<DBObject> fruits = new ArrayList<DBObject>();
  38. // 数组中的每一个文档,我们通过BasicDBObjectBuilder来构造
  39. fruits.add(BasicDBObjectBuilder.start().add("name", "apple").add("quality", "good").add("price", "5.6").get());
  40. fruits.add(BasicDBObjectBuilder.start().add("name", "orange").add("quality", "normal").add("price", "1.5").get());
  41. shop1.put("fruits", fruits);
  42. fruitShop.insert(shop1);
  43. }
  44. }

我们通过Shell连接到数据库上,直观地看看数据库中集合内的数据:

  1. > use mylearndb;
  2. switched to db mylearndb
  3. > db.fruitshop.find();
  4. { "_id" : ObjectId("504c26fed9005e6e410c5979"), "name" : "The Fruit King", "frui
  5. 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文档:

http://api.mongodb.org/java/2.9.0/

上一篇:Java RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇


下一篇:bzoj2124 等差子序列(hash+线段树)