学习MongoDB-应用举例(利用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驱动中文档必须是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/
参考链接:
JAVA单例MongoDB工具类
学习MongoDB-应用举例(利用java操作MongoDB)的更多相关文章
- Mongodb入门并使用java操作Mongodb
转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...
- 学习MongoDB--(11):应用举例(利用java操作MongoDB)
原文地址:http://blog.csdn.net/drifterj/article/details/7948090 目录地址:http://blog.csdn.net/DrifterJ/articl ...
- MongoDB(六)java操作mongodb增删改查
java操作mysql数据库的代码我们已经了如指掌了.增删改查,java对mongodb数据库也是类似的操作,先是数据库连接.再是进行操作. 首先我们进入进入admin数据库.然后建立自己的数据库te ...
- MongoDB(3)--Java 操作 MongoDB 的 API
引入mongoDb 依赖 <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-j ...
- Mongodb快速入门之使用Java操作Mongodb
[IT168 专稿]在上一篇文章中,我们学习了Mongodb的安装和初步使用,在本文中,将学习如何使用Java去编程实现对Mongodb的操作. HelloWorld程序 学习任何程序的第一步,都是编 ...
- 浅谈如何用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,必须先 ...
- 【MongoDB for Java】Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...
随机推荐
- Gitlab-通过API管理项目
Gitlab有一个非常强大的API,几乎可以通过API管理在Gitlab服务器中的所有项目. 在这里我们只是测试终端点的API, 因此我们需要一个程序来进行测试 .在这里我使用的是针对Google浏览 ...
- poj1182 食物链(带权并查集)
题目链接 http://poj.org/problem?id=1182 思路 前面做的带权并查集的权值记录该结点与其父结点是否是同一类,只有两种取值情况(0,1),在这题中某结点a和其父结点b的取值共 ...
- Java_正则表达式&时间日期
正则表达式 1.概念 正则表达式(英语:Regular Expression,在代码中常简写为regex). 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则 ...
- MIT-6.828-JOS-lab1:C, Assembly, Tools, and Bootstrapping
Lab1:Booting a PC 概述 本文主要介绍lab1,从内容上分为三部分,part1简单介绍了汇编语言,物理内存地址空间,BIOS.part2介绍了BIOS从磁盘0号扇区读取boot loa ...
- 如何快速分析出现性能问题的Linux服务器
Brendan Gregg曾经分享过当遇到一个系统性能问题时,如何利用登录的前60秒对系统的性能情况做一个快速浏览和分析,主要包括如下10个工具,这是一个非常有用且有效的工具列表.本文将详细介绍这些命 ...
- WebApi-JSON序列化循环引用
Overview 最近被序列化,循环引用的问题,让我浑身酸爽.遇到这种异常是在搭建WebApi的时候,当我返回Linq实例类集合的时候出现的. 下定决心要解决这个问题.循环引用引起的原因是: 比如说: ...
- 机器学习之路: python 朴素贝叶斯分类器 MultinomialNB 预测新闻类别
使用python3 学习朴素贝叶斯分类api 设计到字符串提取特征向量 欢迎来到我的git下载源代码: https://github.com/linyi0604/MachineLearning fro ...
- python的可变与不可变数据类型
<python的可变与不可变数据类型> python与C/C++不一样,它的变量使用有自己的特点,当初学python的时候,一定要记住“一切皆为对象,一切皆为对象的引用”这句话,其 ...
- DP Training(Updating)
感觉前面做了那么多$dp$全是自己想的还是太少啊…… 好像在LZT的博客上看到了不错的资源?赶紧开坑,以一句话题解为主 Codeforces 419B 第一题就开始盗图 由于只有一个交点,手玩一下发现 ...
- 【SPFA】POJ1860-Currency Exchange
[题目大意] 给出每两种货币之间交换的手续费和汇率,求出从当前货币s开始交换,能否赚. [思路] 反向运用SPFA,判断是否有正环.每次队首元素出队之后,判断一下到源点s的距离是否增大,增大则返回tr ...