文档章节

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

黎明你好
 黎明你好
发布于 2017/08/09 10:44
字数 922
阅读 7
收藏 0
点赞 0
评论 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();
}

 

 

 

© 著作权归作者所有

共有 人打赏支持
黎明你好
粉丝 1
博文 16
码字总数 2187
作品 1
朝阳
程序员
Spring从MongoDB中下载文件之GridFS

问题 之前提到过以GridFS方式上传问题到MongoDB中:Spring保存文件到MongoDB之GridFS支持。现在需要从Mongodb中读取文件,应该怎么处理类? 解决 Maven 注解mongoDbFactory 获取文件流 Note...

亚林瓜子 ⋅ 06/12 ⋅ 0

MyCAT SQL ON MongoDB

概述 可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。 吼吼吼,让我们开启这段神奇的“旅途”。 本文主要分成四部分: 总体流程,让你有个整体...

wangchen1999 ⋅ 05/02 ⋅ 0

MongoDB在spring中xml传统配置

背景 旧项目中依然在使用springmvc的xml传统配置,最近需要使用MongoDB,需要在spring引入MongoDB的连接配置。 解决 配置mongodb数据库 配置mongodb数据工厂 配置mongodb的Template 配置mon...

亚林瓜子 ⋅ 06/12 ⋅ 0

mongodb java的疑惑

mongodb的可视化客户端Studio 3T,好像是基于java的吧。我在Studio 3T里面输入mongodb的命令可以直接执行。但是好像没有在mongo 的java驱动里面找到直接运行命令行的方法啊。...

superbone ⋅ 04/16 ⋅ 0

一把双刃剑:关于MongoDB的学习和避坑

  【IT168 评论】MongoDB 是一把双刃剑,它对数据结构的要求并不高。数据通过key-value的形式存储,而value的值可以是字符串,也可以是文档。所以我们在使用的过程中非常方便。正是这种方便...

博客园 ⋅ 05/28 ⋅ 0

waylau/new-star-blog

NewStarBlog NewStarBlog is an open source Java blog platform. NewStarBlog 是开源 Java 博客平台。 Technologies 涉及技术 NewStarBlog covers Spring Framework 5, Spring Boot 2, Thym......

waylau ⋅ 04/26 ⋅ 0

spring-boot-starter-mongodb-pool

在日常工作中,我们通过Spring Data Mongodb来操作Mongodb数据库,在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可。 很多时候我们往往需要操作多个数据库(微服务架构下一个...

尹吉欢 ⋅ 04/22 ⋅ 0

Graylog日志监控集群搭建

场景及日志量 由于公司是物联网场景,设备每10秒都会上报Gps数据,后端猿对每个每个上传数据的处理都加入了日志,加上后端猿用Quartz写了许多无状态的后台服务,每10s跑一次,而且有多个环境...

秦时明月路 ⋅ 05/30 ⋅ 0

ZK7.0.3中从MongoDB下载文件

问题 在完成Spring从MongoDB中下载文件之GridFS之后,现在需要在ZK7.0.3的ViewModel中下载该文件。 思路 先从MongoDB获取到,以及把转化为ZK的Filedownload能够使用的进行文件下载。 实现 导...

亚林瓜子 ⋅ 06/12 ⋅ 0

Spring boot中mongodb的使用

mongodb的增删改查 Spring Boot对各种流行的数据源都进行了封装,当然也包括了mongodb,下面给大家介绍如何在spring boot中使用mongodb: 1、pom包配置 pom包里面添加spring-boot-starter-dat...

glen_xu ⋅ 06/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

sbt网络问题解决方案

http://dblab.xmu.edu.cn/blog/maven-network-problem/

狐狸老侠 ⋅ 6分钟前 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 49分钟前 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 55分钟前 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部