`
limingnihao
  • 浏览: 1824441 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多

第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();
}

 

 

 

2
4
分享到:
评论

相关推荐

    NodeJS学习笔记之MongoDB模块

    nodejs是个强大的平台,...我们现在需要和mongodb连接的驱动,就类似比如mysql的java驱动一样。nodejs有好几个mongodb的第三方驱动。和jdbc不一样,没有标准。所以需要到驱动的网站上去了解学习怎么使用它访问mongodb。

    Spring-data-jpa 学习笔记.docx

    ### Spring-data-jpa 学习笔记 #### 一、spring-data-jpa的简单介绍 Spring Data JPA 是 Spring Data 的一部分,它简化了基于 Java Persistence API (JPA) 的数据访问层开发工作。Spring Data 旨在减少数据访问层...

    本仓库主要记录第三届字节跳动青训营-后端专场笔记.zip

    【标题】: "第三届字节跳动青训营-后端专场笔记" 是一个与字节跳动公司举办的青年技术训练营相关的学习资料压缩包,其中聚焦于后端开发的知识和经验分享。这个压缩包可能包含了参与者的笔记、课程大纲、代码示例和...

    个人学习资料tp1111

    这个压缩包可能包含了上述领域的教程、案例实践、代码示例、学习笔记等,为个人自主学习提供了丰富的资源。无论是初学者还是有一定经验的开发者,都能从中找到适合自己的学习路径。通过系统地学习和实践,可以逐步...

    Oracle笔记1

    - 目录结构中,例如`jdbc\lib`存放数据库连接驱动,`jdk\lib`存放Java开发工具,`Admin`存放网络配置文件,`orcl`存放数据库文件和日志。 5. **数据库使用** - **Sql Plus**:命令行工具,无需启动监听器,但操作...

    java代码-20大数据一 05

    7. **NoSQL数据库**:如MongoDB、Cassandra等,它们可以处理非结构化和半结构化的大数据,Java有相应的驱动程序支持。 8. **数据序列化**:如JSON或protobuf,用于数据交换和持久化。 9. **Apache Avro**和**...

    15.-Spring-note.zip_Java编程_Java_

    标题中的"15.-Spring-note.zip"提示我们这是一个关于Spring框架的学习资料,而"Java编程_Java"标签进一步确认了这是与Java语言和其相关的Spring框架相关的知识。压缩包内的"15. Spring note.txt"文件很可能是Spring...

    spring_day06_spring_

    标题中的"spring_day06_spring_"表明这是关于Spring框架的第六天学习内容,而描述中的"heima source code day 06"暗示我们将探讨的是有关Heima(可能是一个项目或公司的名称)的源代码,这与Spring框架的集成或者在...

    孙哥说Spring5代码.zip

    《孙哥说Spring5代码》压缩包中包含的是关于Spring框架第五个主要版本的编程实践内容。Spring框架是Java开发中最广泛使用的轻量级框架,它提供了强大的依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等...

    阿里巴巴研发工程师笔试选择题二-教程与笔记习题

    - 数据库设计:理解范式理论,如第一范式(1NF)、第二范式(2NF)和第三范式(3NF),以及反范式设计。 - ACID特性:原子性、一致性、隔离性和持久性在数据库操作中的作用。 6. **分布式系统** - 分布式一致性...

    springboot实例

    它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者可以快速地创建出生产级别的、基于 Spring 的 Java 应用。 在 "springboot 简单登陆实例" 中,我们关注的核心知识点是 ...

Global site tag (gtag.js) - Google Analytics