原文地址: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. 原版本的jquery 开发过程中发现jquery好像更新了

    /*! jQuery v1.7.1 jquery.com | jquery.org/license */ (function(a,b){function cy(a){return f.isWindow ...

  2. Python的numpy库下的几个小函数的用法

    numpy库是Python进行数据分析和矩阵运算的一个非常重要的库,可以说numpy让Python有了matlab的味道 本文主要介绍几个numpy库下的小函数. 1.mat函数 mat函数可以将目标 ...

  3. ABBYY FineReader 12PDF选项卡有保存模式吗

    PDF是广泛使用的文档格式.在ABBYY Finereader中PDF文档的显示不会因电脑不同而有差异,可加密保护,非常适合在电子存档中进行保存 该选项卡上的保存选项分为以下几类: 默认纸张大小 从下 ...

  4. Js中的window.parent ,window.top,window.self ,window.openner详解

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...

  5. sql字符串插入函数STUFF

    STUFF (Transact-SQL) SQL Server 2012 其他版本 此主题尚未评级 - 评价此主题 <?XML:NAMESPACE PREFIX = "[default ...

  6. android 二维码扫描

    了解二维码这个东西还是从微信 中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一张图片中扫一下竟然能直接加好友,不可思议啊,那时候还不了解二维码,呵呵,然后做项目的时候, 老板说要加上二维码扫描功 ...

  7. mysql edit

    表外键5个相关性: cascade,restrict,set null,no action,default   show character set ;   show collation like ' ...

  8. SSL使用windows证书库中证书实现双向认证

    前一段时间对OpenSSL库中的SSL通讯稍微琢磨了一下,在百度文库中找了个示例程序,然后在机器上跑,哇塞,运行成功!那时那个惊喜啊,SSL蛮简单的嘛.前几天,老板要我整一个SSL通讯,要使用wind ...

  9. RDO部署openstack(3)

    目前OpenStackNeutron框架支持的网络服务有:LoadBalancing as a Service,VPNas a Service,Firewallas a Service. 1. 安装和 ...

  10. HackerRank "Median Updates"

    Same as LintCode "Sliding Window Median", but requires more care on details - no trailing ...