学习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中类似,几乎所有的方法名也都一致,我们先看个简单的例子吧:
- package cn.test;
- import java.net.UnknownHostException;
- import com.mongodb.BasicDBObject;
- import com.mongodb.DB;
- import com.mongodb.DBCollection;
- import com.mongodb.DBObject;
- import com.mongodb.Mongo;
- public class Test {
- public static void main(String[] args) throws UnknownHostException {
- /**
- * Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017.
- */
- Mongo connection = new Mongo("localhost:20000");
- /**
- * DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个
- */
- DB db = connection.getDB("mylearndb");
- /**
- * DBCollection代表集合,如果数据库中没有该集合,会默认创建一个
- */
- DBCollection users = db.getCollection("users");
- /**
- * DBObject代表文档,这是一个接口,java中提供了多种实现,最简单的就是BasicDBObject了
- */
- DBObject user = new BasicDBObject();
- user.put("name", "jimmy");
- user.put("age", "34");
- DBObject address = new BasicDBObject();
- address.put("city", "bj");
- address.put("street", "bq road");
- address.put("mail", "ufpark 68#");
- /**
- * 对于内嵌文档,我们需要先将内嵌文档填充后,再填充到外层文档中!
- */
- user.put("address", address);
- // 将该文档插入到集合中
- users.insert(user);
- // 从集合中查询数据,我们就查询一条,调用findOne即可
- DBObject dbUser = users.findOne();
- System.out.println("name" + " : " + dbUser.get("name") );
- System.out.println("age" + " : " + dbUser.get("age") );
- DBObject dbAddress = (DBObject)user.get("address");
- System.out.println("city" + " : " + dbAddress.get("city") );
- System.out.println("street" + " : " + dbAddress.get("street") );
- System.out.println("mail" + " : " + dbAddress.get("mail") );
- }
- }
输出结果为:
- name : jimmy
- age : 34
- city : bj
- street : bq road
- mail : ufpark 68#
从上述例子,我们可以看出,利用Java驱动操作MongoDB和shell中操作方式是十分相似的,Java中操作更具有OO的特征。
我们这里稍微提一下上面注释中,解释的文档类。Java驱动中文档必须是DBObject接口类型,这个接口可以认为是一个有序地java.util.Map。Java驱动中有提供了很多实现,我们上例中采用了最简单的BasicDBObject。
【向集合中保存数组】
MongoDB集合中的键值对的值支持数组,在shell中,我们通过[],来表示数组,那Java驱动中如何表示数组呢?在Java驱动中,java.util.List类型的对象,都可以表示MongoDB中的数组!我们看一个例子:
- package cn.test;
- import java.net.UnknownHostException;
- import java.util.ArrayList;
- import java.util.List;
- import com.mongodb.BasicDBObject;
- import com.mongodb.BasicDBObjectBuilder;
- import com.mongodb.DB;
- import com.mongodb.DBCollection;
- import com.mongodb.DBObject;
- import com.mongodb.Mongo;
- public class Test1 {
- public static void main(String[] args) throws UnknownHostException {
- /**
- * Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017.
- */
- Mongo connection = new Mongo("localhost:20000");
- /**
- * DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个
- */
- DB db = connection.getDB("mylearndb");
- /**
- * DBCollection代表集合,如果数据库中没有该集合,会默认创建一个
- */
- DBCollection fruitShop = db.getCollection("fruitshop");
- /**
- * 创建水果店文档对象
- */
- DBObject shop1 = new BasicDBObject();
- shop1.put("name", "The Fruit King");
- /**
- * 水果店内水果保存在一个内嵌文档的数组中,格式为:
- * [{"name" : "apple", "quality" : "good", "price" : "5.6"},
- * {"name" : "orange", "quality" : "normal", "price" : "1.5"},
- * ......]
- */
- // 数组通过List表示
- List<DBObject> fruits = new ArrayList<DBObject>();
- // 数组中的每一个文档,我们通过BasicDBObjectBuilder来构造
- fruits.add(BasicDBObjectBuilder.start().add("name", "apple").add("quality", "good").add("price", "5.6").get());
- fruits.add(BasicDBObjectBuilder.start().add("name", "orange").add("quality", "normal").add("price", "1.5").get());
- shop1.put("fruits", fruits);
- fruitShop.insert(shop1);
- }
- }
我们通过Shell连接到数据库上,直观地看看数据库中集合内的数据:
- > use mylearndb;
- switched to db mylearndb
- > db.fruitshop.find();
- { "_id" : ObjectId("504c26fed9005e6e410c5979"), "name" : "The Fruit King", "frui
- ts" : [ { "name" : "apple", "quality" : "good", "price"
- : "5.6" }, { "name" : "orange", "quality" : "normal", "price"
- : "1.5" } ] }
- >
以上就是利用Java驱动操作MongoDB的一个简单示例,使用Java驱动操作MongoDB很简单,大家实际使用中对于API可以参照MongoDB提供的官方文档。
下面的链接就是2.9.0版驱动对应的API文档:
http://api.mongodb.org/java/2.9.0/
学习MongoDB--(11):应用举例(利用java操作MongoDB)的更多相关文章
- Mongodb快速入门之使用Java操作Mongodb
[IT168 专稿]在上一篇文章中,我们学习了Mongodb的安装和初步使用,在本文中,将学习如何使用Java去编程实现对Mongodb的操作. HelloWorld程序 学习任何程序的第一步,都是编 ...
- 学习MongoDB-应用举例(利用java操作MongoDB)
Java驱动程序是MongoDB最早的驱动,已用于生产环境很长时间,十分稳定.可以到MongoDB官方网站下载驱动,驱动版本为2.9.0. 这个jar文件中,有两个包,我们会经常用到com.mongo ...
- JAVA操作MongoDB数据库
1. 首先,下载MongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads 2.Java操作Mo ...
- Mongodb入门并使用java操作Mongodb
转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...
- 浅谈如何用Java操作MongoDB
NoSQL数据库因其可扩展性使其变得越来越流行,利用NoSQL数据库可以给你带来更多的好处,MongoDB是一个用C++编写的可度可扩展性的开源NoSQL数据库.本文主要讲述如何使用Java操作Mon ...
- Java操作Mongodb(转载)
好文章,值得收藏 HelloWorld程序 学习任何程序的第一步,都是编写HelloWorld程序,我们也不例外,看下如何通过Java编写一个HelloWorld的程序. 首先,要通过Java操作Mo ...
- [转载]使用Java操作Mongodb
HelloWorld程序 学习任何程序的第一步,都是编写HelloWorld程序,我们也不例外,看下如何通过Java编写一个HelloWorld的程序. 首先,要通过Java操作Mongodb,必须先 ...
- 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解
本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...
- 【MongoDB for Java】Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...
随机推荐
- FreeSWITCH在呼叫失败的情况下播放语音提示
看到好多网友问到这个问题.一般我们在打电话时会听到“您拨的电话正在通话中,请稍后再拨....”,或“电话无应答...”之类的提示,我们在 freeswitch 里也可以这样做. 其实很简单,默认的配置 ...
- Processor Speculative & pipeline
https://en.wikipedia.org/wiki/Instruction-level_parallelism https://en.wikipedia.org/wiki/Instructio ...
- 大白话系列之C#委托与事件讲解(二)
什么是事件?EVENT?点击事件?加载事件?一连串的模糊的概念冲击着我们弱小的脑袋 那我们首先来看一下比较正统的感念吧: 事件是类在发生其关注的事情时用来提供通知的一种方式. 事件的发生一般都牵扯2个 ...
- Xcode 7 ImageNamed 方法加载jpg图片失败
更新XCode7后 原来的Image.xcassets文件夹变成了Assets.xcassets 把01.jpg,02.jpg,03.png拖入这个文件夹中 UIImage* test1=[UIIma ...
- c#判断特殊字符?
, ).Select(c => (char)c).Where(c => char.IsSymbol(c) || char.IsPunctuation(c)).ToArray()); Deb ...
- threading模块和queue模块实现程序并发功能和消息队列
简介: 通过三个例子熟悉一下python threading模块和queue模块实现程序并发功能和消息队列. 说明:以下实验基于python2.6 基本概念 什么是进程? 拥有独立的地址空间,内存,数 ...
- EDIUS分别输出视频和音频的教程
使用EDIUS剪辑好视频之后渲染输出文件时,为什么视频和音频分别出,而不是一起呢?这个问题很可能会让一些新手困惑不已,到底是什么原因呢?又要如何设置才能让输出的文件视音频一体呢?下面,小编将来和大家探 ...
- C编码-1
两个关键点,一个是要懂C语法,另一个要懂业务知识,即能够分解问题 字节序测试程序 不同cpu平台上字节序通常也不一样,下面写个简单的C程序,它可以测试不同平台上的字节序. 网络字节序说是大端字节序. ...
- CentOS6.6 安装 Tengine 笔记
Tengine官网上有个非常简单的教程,中间并未涉及到一些常用的设置,所以仅供参考.一下午为本人的安装步骤及过程. 1.安装必要的编译环境好 由于Tengine安装需要使用源代码自行编译,所以在安装前 ...
- java将office文档pdf文档转换成swf文件在线预览
第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行. 主要模块有writer(文 ...