原文地址: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. FreeSWITCH在呼叫失败的情况下播放语音提示

    看到好多网友问到这个问题.一般我们在打电话时会听到“您拨的电话正在通话中,请稍后再拨....”,或“电话无应答...”之类的提示,我们在 freeswitch 里也可以这样做. 其实很简单,默认的配置 ...

  2. Processor Speculative & pipeline

    https://en.wikipedia.org/wiki/Instruction-level_parallelism https://en.wikipedia.org/wiki/Instructio ...

  3. 大白话系列之C#委托与事件讲解(二)

    什么是事件?EVENT?点击事件?加载事件?一连串的模糊的概念冲击着我们弱小的脑袋 那我们首先来看一下比较正统的感念吧: 事件是类在发生其关注的事情时用来提供通知的一种方式. 事件的发生一般都牵扯2个 ...

  4. Xcode 7 ImageNamed 方法加载jpg图片失败

    更新XCode7后 原来的Image.xcassets文件夹变成了Assets.xcassets 把01.jpg,02.jpg,03.png拖入这个文件夹中 UIImage* test1=[UIIma ...

  5. c#判断特殊字符?

    , ).Select(c => (char)c).Where(c => char.IsSymbol(c) || char.IsPunctuation(c)).ToArray()); Deb ...

  6. threading模块和queue模块实现程序并发功能和消息队列

    简介: 通过三个例子熟悉一下python threading模块和queue模块实现程序并发功能和消息队列. 说明:以下实验基于python2.6 基本概念 什么是进程? 拥有独立的地址空间,内存,数 ...

  7. EDIUS分别输出视频和音频的教程

    使用EDIUS剪辑好视频之后渲染输出文件时,为什么视频和音频分别出,而不是一起呢?这个问题很可能会让一些新手困惑不已,到底是什么原因呢?又要如何设置才能让输出的文件视音频一体呢?下面,小编将来和大家探 ...

  8. C编码-1

    两个关键点,一个是要懂C语法,另一个要懂业务知识,即能够分解问题 字节序测试程序 不同cpu平台上字节序通常也不一样,下面写个简单的C程序,它可以测试不同平台上的字节序. 网络字节序说是大端字节序. ...

  9. CentOS6.6 安装 Tengine 笔记

    Tengine官网上有个非常简单的教程,中间并未涉及到一些常用的设置,所以仅供参考.一下午为本人的安装步骤及过程. 1.安装必要的编译环境好 由于Tengine安装需要使用源代码自行编译,所以在安装前 ...

  10. java将office文档pdf文档转换成swf文件在线预览

    第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行. 主要模块有writer(文 ...