文档章节

MongoDB学习笔记之 第3章 MongoDB的Java驱动

黎明你好
 黎明你好
发布于 2017/08/09 10:44
字数 922
阅读 8
收藏 0

 

MongoDB学习笔记之 第1章 MongoDB的安装

MongoDB学习笔记之 第2章 MongoDB的增删改查

MongoDB学习笔记之 第3章 MongoDB的Java驱动

MongoDB学习笔记之 第4章 MongoDB整合Spring

第3章 MongoDB的Java驱动

(黎明你好原创作品,转载请注明)

3.1 下载Java驱动

3.1.1 Jar包

http://central.maven.org/maven2/org/mongodb/mongo-java-driver/

 

3.1.2 Maven

 

<dependency>
	<groupId>org.mongodb</groupId>
	<artifactId>mongo-java-driver</artifactId>
	<version>2.10.1</version>
	<type>jar</type>
	<scope>compile</scope>
</dependency>

 

 

3.2 基本操作

3.2.1 基本操作

 

String myUserName = "admin";
String myPassword = "admin";
MongoClient mongoClient = new MongoClient("localhost", 27017);

// 1.数据库列表
for (String s : mongoClient.getDatabaseNames()) {
	System.out.println("DatabaseName=" + s);
}

// 2.链接student数据库
DB db = mongoClient.getDB("student");
mongoClient.setWriteConcern(WriteConcern.JOURNALED);

// 3.用户验证
boolean auth = db.authenticate(myUserName, myPassword.toCharArray());
System.out.println("auth=" + auth);

// 4.集合列表
Set<String> colls = db.getCollectionNames();
for (String s : colls) {
	System.out.println("CollectionName=" + s);
}

// 5.获取摸个集合对象
DBCollection coll = db.getCollection("user");

 

 

3.2.2 新增

 

BasicDBObject doc = new BasicDBObject("_id", "6").append("name", new BasicDBObject("username", "limingnihao").append("nickname", "黎明你好")).append("password", "123456")
		.append("password", "123456").append("regionName", "北京").append("works", "5").append("birth", new Date());
WriteResult result = coll.insert(doc);

System.out.println("insert-result: " + result);

 

 

3.2.3 查询

 

// 2.1查询 - one
DBObject myDoc = coll.findOne();
System.out.println(myDoc);

// 2.2 查询 - 数量
System.out.println(coll.getCount());

// 2.3查询 - 全部
DBCursor cursor = coll.find();
while (cursor.hasNext()) {
System.out.println("全部--------" + cursor.next());
}

// 2.4查询 - 过滤 - 等于
BasicDBObject query = new BasicDBObject("age", 1);
cursor = coll.find(query);
while (cursor.hasNext()) {
System.out.println("age=1--------" + cursor.next());
}

// 2.5查询 - 过滤条件 - 不等于
query = new BasicDBObject("age", new BasicDBObject("$ne", 1));
cursor = coll.find(query);
while (cursor.hasNext()) {
System.out.println("age!=1" + cursor.next());
}

// 2.6查询 - 过滤条件 - 20 < i <= 30
query = new BasicDBObject("age", new BasicDBObject("$gt", 20).append("$lte", 30));
cursor = coll.find(query);
while (cursor.hasNext()) {
System.out.println("20<age<=30" + cursor.next());
}

 

 

3.2.4 修改

 

DBObject search = coll.findOne(new BasicDBObject("_id", "5"));
BasicDBObject object = new BasicDBObject().append("$set", new BasicDBObject("password", "1211111")).append("$set", new BasicDBObject("birth", new Date()));
WriteResult result = coll.update(search, object, true, true);
System.out.println("update-result: " + result);

 

 

3.2.5 删除

 

DBObject search = coll.findOne(new BasicDBObject("_id", "6"));
WriteResult result = coll.remove(search);
System.out.println("remove-result: " + result);

 

 

3.3 Java驱动并发

        Java MongoDB驱动程序是线程安全的。如果在Web服务器环境中使用,那么应该创建一个MongoClient实例全局使用。MongoClient内部维护了数据库的连接池(默认连接池大小为10)。每次DB请求(查询、插入等)的Java线程将从连接池中获取链接并进行支持,然后释放连接。每次使用连接是不相同的。

        在复制(replica)模式下,如果设置slaveOK选项为on,那么读操作会被均匀的分布到各个slave上。这意味着对于同一个线程,一个写操作后紧跟着的一个读操作,有可能被发送到不同的服务器上(写操作发送到master上,读操作发送到slave上),这样读操作有可能不会立刻反映出上一个写操作的数据(因为主从的异步性)。

        如果你想要确保在一个session中完整的一致性(例如在一个http请求中),你可能希望java驱动是用同一个socket连接,这时你可以通过使用"consistent request"来达到目的——在操作前后分别调用requestStart()和requestDone()。

DB和DBCollection完全是线程安全的。事实上,你不管怎么样调用都是同一实例,因为他们进行了缓存。

 

DB db...;
db.requestStart();
try {
   db.requestEnsureConnection();
   code....
} finally {
   db.requestDone();
}

 

 

在单独写操作上的WriteConcern选项

        默认情况下,每次写操作后,连接就被释放回连接池——此时你调用getLastError()是没用的。

所以可以采用两种方式:

        1,使用类似WriteConcern.SAFE这样的写策略来代替默认策略,这样java驱动会自动首先调用getLastError(),然后才将连接放回连接池。

DBCollection coll...;
coll.insert(..., WriteConcern.SAFE);

 

        2,采用上述的requestStart()和requestDone()方式来维持连接不被释放,中间调用getLastError()获取错误信息。

DBCollection coll...;
coll.insert(..., WriteConcern.SAFE);
DB db...;
DBCollection coll...;
db.requestStart();
try {
   coll.insert(...);
   DBObject err = db.getLastError();
} finally {
   db.requestDone();
}

 

 

 

本文转载自:http://limingnihao.iteye.com/blog/1940438

共有 人打赏支持
黎明你好
粉丝 2
博文 16
码字总数 2187
作品 1
朝阳
程序员
私信 提问
【MongoDB for Java】Java操作MongoDB

开发环境: System:Windows IDE:eclipse、MyEclipse 8 Database:mongoDB 开发依赖库: JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar Email:hoojo_@126.com Blog:http://blog.csdn.net/IB......

underA
2013/05/15
0
0
性能测试工具操作数据库(五)-Jmeter与MongoDB

JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码方式测试MongoDB性能。 第一种方法 1.编写Java代码,内容如下: 2.生成jar包,放在Jmeter_HO...

smooth00
2017/03/28
0
0
MongoDB 基本操作与MongoDB for JAVA

一、准备工作 1、 下载mongoDB 下载地址:http://www.mongodb.org/downloads 选择合适你的版本 相关文档:http://www.mongodb.org/display/DOCS/Tutorial 2、 安装mongoDB A、 不解压模式: ...

IT_小翼
2013/08/07
0
1
spring MVC 整合mongodb

Spring Mongodb 目录 1 SPRING整合MONGODB 1 1.1 环境准备 1 1.2 包依赖 1 1.3 配置 2 2 案列 5 2.1 SPRING MVC整合MONGODB代码案例 5 1 Spring整合Mongodb 1.1 环境准备 1. mongodb官网 ht...

浅夏
2014/03/13
0
0
Java 程序访问 MongoDB 数据库(入门)

NoSQL 数据库因为其良好的可伸缩性日益受关注,如果使用得当的话,NoSQL 可以带来很大的提升。而 MongoDB 就是一个用 C++ 开发的开源的高可伸缩性的 NoSQL 数据库。 本文将介绍如何在 Java 程...

红薯
2012/07/02
700
0

没有更多内容

加载失败,请刷新页面

加载更多

Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
45分钟前
1
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
1
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部