MongoDB的Java驱动使用整理 (转)
MongoDB Java Driver 简单操作
一、Java驱动一致性
MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个)。
对于有大量写和读的环境中,为了确保在一个Session中使用同一个DB时,我们可以用以下方式保证一致性:
DB mdb = mongo.getDB('dbname');
mdb.requestStart();
//
// 业务代码
//
mdb.requestDone();
DB和DBCollection是绝对线程安全的,它们被缓存起来了,所以在应用中取到的可能是同一个对象。
二、保存/查找对象(DBObject)
Java驱动提供了DBObject接口,方便我们保存对象到数据库中。
定义需要保存的对象:
public class Tweet implements DBObject {
/** ...... */
}
然后我们可以使用该对象:
Tweet tweet = new Tweet();
tweet.put("user", userId);
tweet.put("message", message);
tweet.put("date", new Date());
collection.insert(tweet);
当从数据库中查询时,结果会自动的转换成DBObject对象,我们可以转换成我们自己的类型:
collection.setObjectClass(Tweet);
Tweet myTweet = (Tweet)collection.findOne();
三、创建连接
Mongo m = new Mongo();
Mongo m = new Mongo("localhost");
Mongo m = new Mongo("localhost", 27017);
DB db = m.getDB("mydb);
注意:事实上,Mongo实例代表了一个数据库连接池,即使在多线程的环境中,一个Mongo实例对我们来说已经足够了。
四、认证(可选的)
boolean auth = db.authenticate("myUserName", "myPasswd");
五、取得Collection列表
Set<String> colls = db.getCollectionNames();
for(String s : colls) {
System.out.prinln(s);
}
六、获取一个Collection
DBCollection coll = db.getCollection("testCollection");
使用DBCollection,我们可以进行插入、查询数据等数据操作。
七、插入文档
假设有个JSON文档如下所示:
{
"name": "MongoDB",
"type": "database",
"count": 1,
"info": {
x: 203,
y: 102
}
}
注意:上面的JSON文档有个内嵌文档"info"。
我们完全可以利用BasicDBObject来创建一个和上面的JSON一样的文档,并且把它保存在MongoDB中。
DBObject doc = new BasicDBObject();
doc.put("name", "MongoDB");
doc.put("type", "database");
doc.put("count", 1);
DBObject info = new BasicDBObject();
info.put("x", 203);
info.put("y", 102);
doc.put("info", info);
coll.insert(doc);
八、查询第一个文档(findOne())
为了验证在上面我们保存的类似JSON的数据,我们可以用findOne()方法取得数据。
findOne(): 返回一个文档;
find(): 返回一个游标(DBCursor),其中包含一组对象DBObject;
DBObject doc = coll.findOne();
System.out.println(doc);
我们将会看到控制台输出:
{ "_id" : "49902cde5162504500b45c2c" , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info" : { "x" : 203 , "y" : 102} , "_ns" : "testCollection"}
九、插入多个文档
为了在后来展示更多的查询方法,我们先插入几个文档,它们的JSON像这样:
{
"i": value
}
使用一个循环插入数据:
for(int i = 0; i < 100; i++) {
coll.insert(new BasicDBObject().append("i", i));
}
我们注意到,同一个coll,我们完全可以插入不同风格的数据,这就是MongoDB的重要特性“模式自由”。
十、统计文档数
现在我们已经有101份文档在数据库中了,现在统计一下看是否正确。
long count = coll.getCount();
System.out.println(count);
控制台将会输出:101
十一、使用游标取得所有的文档
DBCursor cursor = coll.find();
while(cursor.hasNext()) {
DBObject object = cursor.next();
System.out.println(object);
}
十二、查询单个文档
DBObject query = new BasicDBObject();
query.put("i", 71);
cursor = coll.find(query);
while(cur.hasNext()) {
DBObject object = cursor.next();
System.out.println(object);
}
控制台的输出类似如下:
{ "_id" : "49903677516250c1008d624e" , "i" : 71 , "_ns" : "testCollection"}
十三、查询文档集合
根据查询条件,我们可以通过DBCollection从数据库中取出多个对象,比如查询i>50的文档集合:
query = new BasicDBObject();
query.put("i", new BasicDBObject("$gt", 50)); // i>50
cursor = coll.find(query);
while(cursor.hasNext()) {
DBObject object = cursor.next();
System.out.println(object);
}
比如查询条件为 20<i<=30:
query = new BasicDBObject();
// 20<i<=30
query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));
cursor = coll.find(query);
while(cursor.hasNext()) {
DBObject object = cursor.next();
System.out.println(object);
}
十四、创建索引
MongoDB支持索引,并且给一个DBCollection添加索引非常简单,你只要指明需要创建索引的字段,然后指明其是升序(1)还是降序(-1)即可,比如在"i"上创建升序索引。
coll.createIndex(new BasicDBObject("i", 1)); // 1代表升序
十五、查询索引
我们可以查询到所有的索引:
List<DBObject> list = coll.getIndexInfo();
for(DBObject index : list){
System.out.println(index);
}
控制台的输出类似如下所示:
{ "name" : "i_1" , "ns" : "mydb.testCollection" , "key" : { "i" : 1} , "_ns" : "system.indexes"}
MongoDB的管理功能
一、获取所有的数据库
Mongo m = new Mongo();
for(String s : m.getDatabaseNames()) {
System.out.println(s);
}
二、删除数据库
m.dropDatabase("my_new_db");
MongoDB的Java类型
一、对象ID
ObjectId被用作自动生成的唯一ID.
ObjectId id = new ObjectId();
ObjectId copy = new ObjectId(id);
二、正则表达式
Pattern john = Pattern.compile("joh?n", CASE_INSENSITIVE);
DBObject query = new BasicDBObject("name", john);
// 查询所有 "name" 匹配 /joh?n/i 的文档
DBCursor cursor = collection.find(query);
三、日期和时间
Date now = new Date();
DBObject time = new BasicDBObject("ts", now);
collection.save(time);
四、数据库引用
DBRef可以用来保存数据库引用。
DBRef addressRef = new DBRef(db, "foo.bar", address_id);
DBObject address = addressRef.fetch();
DBObject person = BasicDBObjectBuilder.start()
.add("name", "Fred")
.add("address", addressRef)
.get();
collection.save(person);
DBObject fred = collection.findOne();
DBRef addressObj = (DBRef)fred.get("address");
addressObj.fetch();
五、二进制数据
字节数组(byte[])被当作二进制数据。
六、内嵌文档
JSON样式的数据如下:
{
"x": {
"y": 3
}
}
则在MongoDB中,Java表示为:
DBObject y = new BasicDBObject("y", 3);
DBObject x = new BasicDBObject("x", y);
七、数组
任何继承自List的对象,在MongoDB中,都被当成是数组。
如果想表示如下JSON数据:
{
"x": [
1,
2,
{"foo": "bar"},
4
]
}
则在Java中,应该为:
List<Object> x = new ArrayList<Object>();
x.add(1);
x.add(2);
x.add(new BasicDBObject("foo", "bar"));
x.add(4);
DBObject doc = new BasicDBObject("x", x);
System.out.println(doc);
MongoDB的Java驱动使用整理 (转)的更多相关文章
- MongoDB资料--Java驱动, Hadoop驱动, Spark使用
MongoDB数据库备份: mongodump -h 192.168.1.160 -d MapLoc -o /usr/local/myjar/mongo/MapLoc/数据库还原:mongoresto ...
- mongodb在java驱动包下的操作(转)
推荐几章很有用的文章 java操作参考文档 http://www.cnblogs.com/hoojo/archive/2011/06/02/2068665.html http://blog.csdn. ...
- 【MongoDB】MongoDB的java驱动包使用
要在Java中使用Mongo数据库 首先导入驱动包mongo-java-driver.jar. 然后获得库,获得集合.就可以对数据库操作了,比如: //创建MongoClient对象 MongoCli ...
- MongoDB快速入门学习笔记8 MongoDB的java驱动操作
import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.bson.D ...
- MongoDB操作(1)—MongoDB java驱动核心层次结构及操作流程
MongoDB之java驱动学习 预备: 本地运行MongoDB采用默认端口20717: 安装MongoDB驱动: 以下关键步骤. 核心层次结构或步骤: 创建连接池:MongoClient实例. 对于 ...
- MongoDB之Java测试代码(DAO层)
MongoInit.java是数据库初始化及连接类 MongoUtils.java是对mongodb的各种操作方法 MongoInit.java package com.wlwcloud.datate ...
- MongoDB在java中的使用
在一年前就开始在项目中使用Mongodb作为爬虫(crawler)待下载URL.下载成功URL等的存储库,最近对项目进行版本更新,根据Mongodb的最近升级情况,也对项目中的Mongodb进行了相关 ...
- Ubuntu14.04下Mongodb的Java API编程实例(手动项目或者maven项目)
不多说,直接上干货! 若大家,不会安装的话,则请移步,随便挑选一种. Ubuntu14.04下Mongodb(在线安装方式|apt-get)安装部署步骤(图文详解)(博主推荐) Ubuntu14.04 ...
- MongoDB之Java測试代码(DAO层)
MongoInit.java是数据库初始化及连接类 MongoUtils.java是对mongodb的各种操作方法 MongoInit.java package com.wlwcloud.datate ...
随机推荐
- mybatis多对多关联查询——(十)
1.需求 查询用户及用户购买商品信息. 2 sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.orderdetail. ...
- 【干货】Windows系统信息收集篇
市场分析:计算机取证,就是应急响应.而应急响应的市场在于黑产的攻击频率.在当今的社会里,更多的人为了钱铤而走险的比比皆是,这个市场随着比特币,大数据,物联网的来临,规模将更加的庞大与有组织性.这将导致 ...
- 大数据的常用算法(分类、回归分析、聚类、关联规则、神经网络方法、web数据挖掘)
在大数据时代,数据挖掘是最关键的工作.大数据的挖掘是从海量.不完全的.有噪声的.模糊的.随机的大型数据库中发现隐含在其中有价值的.潜在有用的信息和知识的过程,也是一种决策支持过程.其主要基于人工智能, ...
- JAVA数据库编程(JDBC技术)-入门笔记
本菜鸟才介入Java,我现在不急着去看那些基本的语法或者一些Java里面的版本的特征或者是一些晋级的知识,因为有一点.Net的OOP编程思想,所以对于Java的这些语法以及什么的在用到的时候在去发现学 ...
- springboot:mybatis多数据源配置
1.application.properties #CMS数据源(主库) spring.datasource.cms.driver-class-name=com.mysql.jdbc.Driver s ...
- 关于NotificationListenerService监听时有失败的处理
关于NotificationListenerService监听时有失败的处理 问题由来 去年进入一家专业做智能穿戴设备的公司,在项目中需要监听系统通知栏变化(主要是IM类app的信息获取到后推送到用户 ...
- 为你的 Hadoop 集群选择合适的硬件
随着Apache Hadoop的起步,云客户的增多面临的首要问题就是如何为他们新的的Hadoop集群选择合适的硬件. 尽管Hadoop被设计为运行在行业标准的硬件上,提出一个理想的集群配置不想提供硬件 ...
- LeetCode(18):四数之和
Medium! 题目描述: 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 t ...
- Java编程的逻辑 (58) - 文本文件和字符流
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- Android开源库集合(UI效果)
动画效果 粒子动画效果 https://github.com/glomadrian/Grav 水波式loading等待动画 https://github.com/race604/WaveLoading ...