原文地址: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. MFC开发上位机到底用Dialog结构还是文档结构?

    最近要跟着导师一起开发一款大型上位机.MFC新人在考虑用对话框结构还是文档结构. 虽然说书上说大型结构的软件都需要文档结构,但是目前来看,对话框可以实现功能,并且对话框的程序更小一些,节省资源加载速度 ...

  2. 采用libsvm进行mnist训练

    #coding:utf8 import cPickle import gzip import numpy as np from sklearn.svm import libsvm class SVM( ...

  3. java_linear list

    1.线性表的顺序存储结构,类似ArrayList package collectionsFramework.linearlist; import java.util.Arrays; /** * @Pa ...

  4. Phython 学习笔记之——类的初步认识

    类是面向对象编程的核心,他扮演相关数据及逻辑容器的角色.他们提供了创建实例对象的蓝图.因为python语言不要求必须以面向对象的方式编程(与JAVA不同),这里简单的举一个例子. 如何定义一个类 cl ...

  5. WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  6. webpack 多entry 配置

    // webpack 多entry 配置var path = require('path'); module.exports = { entry: { entry2: './entry.js', de ...

  7. PouchDB:可随时同步的开源JavaScript数据库

    PouchDB是一个开源的JavaScript数据库,可以运行在浏览器中.PouchDB的数据存储.处理方式受到了Apache CouchDB的启发(CouchDB是一个面向文档的数据库,可通过Jav ...

  8. 树莓派 2 win 10 IOT

    Setting up Windows 10 for IoT on your Raspberry Pi This week at the BUILD conference in San Francisc ...

  9. html之span标签

    对于文档中的行内元素最好使用span来组合它们,这样就可以通过样式来格式化它们. span没有任何的样式,当对它应用样式时,才会产生变化 id和class属性是span标签的好伴侣,这样做既可以增加适 ...

  10. Maven 如何为不同的环境打包 —— 开发、测试和生产环境

    在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次 ...