原文地址: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/

学习MongoDB--(11):应用举例(利用java操作MongoDB)的更多相关文章

  1. Mongodb快速入门之使用Java操作Mongodb

    [IT168 专稿]在上一篇文章中,我们学习了Mongodb的安装和初步使用,在本文中,将学习如何使用Java去编程实现对Mongodb的操作. HelloWorld程序 学习任何程序的第一步,都是编 ...

  2. 学习MongoDB-应用举例(利用java操作MongoDB)

    Java驱动程序是MongoDB最早的驱动,已用于生产环境很长时间,十分稳定.可以到MongoDB官方网站下载驱动,驱动版本为2.9.0. 这个jar文件中,有两个包,我们会经常用到com.mongo ...

  3. JAVA操作MongoDB数据库

    1. 首先,下载MongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads 2.Java操作Mo ...

  4. Mongodb入门并使用java操作Mongodb

    转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...

  5. 浅谈如何用Java操作MongoDB

    NoSQL数据库因其可扩展性使其变得越来越流行,利用NoSQL数据库可以给你带来更多的好处,MongoDB是一个用C++编写的可度可扩展性的开源NoSQL数据库.本文主要讲述如何使用Java操作Mon ...

  6. Java操作Mongodb(转载)

    好文章,值得收藏 HelloWorld程序 学习任何程序的第一步,都是编写HelloWorld程序,我们也不例外,看下如何通过Java编写一个HelloWorld的程序. 首先,要通过Java操作Mo ...

  7. [转载]使用Java操作Mongodb

    HelloWorld程序 学习任何程序的第一步,都是编写HelloWorld程序,我们也不例外,看下如何通过Java编写一个HelloWorld的程序. 首先,要通过Java操作Mongodb,必须先 ...

  8. 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解

    本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...

  9. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

随机推荐

  1. Java theory and practice

    This content is part of the series: Java theory and practice A brief history of garbage collection A ...

  2. acess the C\c++ from the Java

    https://en.wikipedia.org/wiki/Java_Native_Interface http://docs.oracle.com/javase/7/docs/technotes/g ...

  3. sql防注入的简单实现,防XSS的简单实现

    1.sql-替换'(切断字符串)符和\(转义字符)符为空, 2.xss-替换<(标签开始符)符 但用这种简单方法在sql和html中不能再使用这些字符了.

  4. android语言适配

    虽然我们现在做的app基本只在国内使用,所以只需要中文,但是我们要把眼光放长远一点,以后我们的APP发展到了国外呢,所以我们就要做语言适配了   很简单 在res目录下,右键  New Resourc ...

  5. jquery layer弹窗弹层插件 小巧强大

    /* 先去官网下载最新的js  http://sentsin.com/jquery/layer/ ①引用jquery ②引用layer.min.js */ 触发弹层的事件可自由绑定,如: $('#id ...

  6. win7 关于远程桌面登陆的方法,相应服务的启动

    转自:http://blog.csdn.net/ningfuxuan/article/details/7519476 远程登陆电脑,对远程电脑的设置 (1)首先要启动远程电脑中的Remote Desk ...

  7. deb、rpm、tar.gz三种Linux软件包的区别

    初接解LINUX的,同样都是for linux,但rpm.tar.gz.deb包还是有很大区别的, 这种区别可使安装过程进行不下去.那我们应该下载什么格式的包呢? rpm包-在红帽LINUX.SUSE ...

  8. [转]Python中urllib与urllib2的区别与联系

    引用文章1:http://my.oschina.net/u/558071/blog/144792 引用文章2:http://zhuoqiang.me/python-urllib2-usage.html ...

  9. [Hibernate] - Load and Get

    Hibernate中使用session的load(...)和get(...)区别: 1.load()方法是在返回的类被后期调用时,才会去提交SQL查询数据库. 2.get()方法是在调用get()时就 ...

  10. IntelliJ IDEA设置自动导入包

    IntelliJ IDEA可以自动优化导入包,但是有多个同名的类位于不同的包时,需要自己手动使用Alt + Enter进行导入. Settings→Editor→General→Auto Import ...