4.0.3的mongodb 安装和java使用
一 整合
由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面。
附上自己的github项目地址 https://github.com/247292980/spring-boot
附上汇总博文地址 https://www.cnblogs.com/ydymz/p/9391653.html
以整合功能
spring-boot,FusionChart,thymeleaf,vue,ShardingJdbc,mybatis-generator,微信分享授权,drools,spring-security,spring-jpa,webjars,Aspect,drools-drt,rabbitmq,zookeeper
这次就来整合下简单的mongodb 安装和java使用
二 安装
基于菜鸟 http://www.runoob.com/mongodb/mongodb-tutorial.html
1.官网安装,没什么好说的新手msi直接一路点下去,老手解压安装,那就更不用说了...
2.环境变量设置,这部很多教程不写,其实多个这玩意cmd用起来很舒服的
3.创建数据目录,data文件夹,conf文件夹,db文件夹,log文件夹
4.创建配置文件mongod.cfg和日志文件。配置文件自己修改成相应的地址
systemLog:
destination: file
path: D:\mongodb-4.0.\data\log\mongod.log
storage:
dbPath: D:\mongodb-4.0.\data\db
5.安装成服务
mongod --config "D:\mongodb-4.0.3\conf\mongod.cfg" --install
6.启动服务
net start MongoDB ps.
net stop MongoDB 停止服务 mongod --remove 卸载服务
三 使用
1.启动后台shell,
mongo
第一次是这样的,他提示你要加个密码
2.选择admin数据库
use admin
3.创建用户
db.createUser( {
user: "admin", //用户名
pwd: "", //密码
roles: [ { role: "root", db: "admin" } ] //权限
} )
ps.
user文档字段介绍:
user字段,为新用户的名字;
pwd字段,用户的密码;
cusomData字段,为任意内容,例如可以为用户全名介绍;
roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色; Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
3.卸载服务,重装再启动,注意--auth
mongod --auth --config "D:\mongodb-4.0.3\conf\mongod.cfg" --install
net start MongoDB net stop MongoDB 停止服务 mongod --remove 卸载服务
此时启动mongo不使用密码登录则看起来成功进入
实际
4.正确的启动
mongo --port -u "admin" -p "" --authenticationDatabase "admin"
四 语法
有兴趣的建议直接菜鸟找吧,了解一下即可
五 java使用
官方api我喜欢这样的官方! http://mongodb.github.io/mongo-java-driver/3.7/javadoc/
坑点一
百度上大多数教程只给了代码,但是依然不成功,因为少导了包,导致java.lang.NoClassDefFoundError: com/mongodb/DBObject
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.8.</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-core -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
<version>3.8.</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mongodb/bson -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>3.8.</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
坑点二
哪怕你绕开的包的坑,你还会进入一个权限验证的坑,主要是因为百度上的版本太低了,需要修改一下校验的版本...而我是直接从官网高最新版本的,这个bug就修复了。但是,配置方面有些许不兼容。例如,mongodb和spring-mongodb默认的认证机制不同。
1、mongodb的认证机制有2种:SCRAM-SHA-1和MONGODB-CR。3.0之后版本默认为:SCRAM-SHA-1; 2、spring-mongodb默认为:MONGODB-CR,并不支持设置认证方式;但是,最新的包已修复这个问题
网上的教程,大多太旧了,所以出现jar包太老而是mongodb太老的问题,或者相反的问题,orz....其实一句话说就是注意版本或者最简单的就是直接用最新
所以,若是你中途觉得菜鸟写的很好,难免会进坑然后又来看我的文章,这时候,我建议你从来来一次...因为,我把前面的不兼容的错修改,但并没有重点指出,因为这只是版本问题。你直接再搞个低版本基本就不会有事了。
代码
public class MongoDBConnect {
public static String HOST = "127.0.0.1";
public static String PORT = "27017"; public static void main(String[] args) {
try {
System.out.println("MongoDBConnect to database begin");
//连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
//ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress("localhost", 27017);
List<ServerAddress> addrs = new ArrayList<ServerAddress>();
addrs.add(serverAddress); //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
MongoCredential credential = MongoCredential.createScramSha1Credential("admin", "admin", "123456".toCharArray());
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(credential); //通过连接认证获取MongoDB连接
MongoClient mongoClient = new MongoClient(addrs, credentials);
//连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("admin");
System.out.println("MongoDBConnect to database successfully"); //创建集合
// mongoDatabase.createCollection("test");
// System.out.println("集合创建成功");
//选择集合
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
System.out.println("集合 test 选择成功"); /**插入文档
* 1. 创建文档 org.bson.Document 参数为key-value的格式
* 2. 创建文档集合List<Document>
* 3. 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用 mongoCollection.insertOne(Document)
* */
Document document = new Document("title", "MongoDB").
append("description", "database").
append("likes", 100).
append("by", "Fly");
List<Document> documents = new ArrayList<Document>();
documents.add(document);
collection.insertMany(documents);
System.out.println("文档插入成功"); /**检索所有文档
* 1. 获取迭代器FindIterable<Document>
* 2. 获取游标MongoCursor<Document>
* 3. 通过游标遍历检索出的文档集合
* */
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while (mongoCursor.hasNext()) {
System.out.println(mongoCursor.next());
}
System.out.println("检索所有文档成功"); //更新文档 将文档中likes=100的文档修改为likes=200
collection.updateMany(Filters.eq("likes", 100), new Document("$set", new Document("likes", 200)));
//检索查看结果
findIterable = collection.find();
mongoCursor = findIterable.iterator();
while (mongoCursor.hasNext()) {
System.out.println(mongoCursor.next());
}
System.out.println("更新文档成功"); //删除符合条件的第一个文档
collection.deleteOne(Filters.eq("likes", 200));
//删除所有符合条件的文档
collection.deleteMany(Filters.eq("likes", 200));
//检索查看结果
findIterable = collection.find();
mongoCursor = findIterable.iterator();
while (mongoCursor.hasNext()) {
System.out.println(mongoCursor.next());
}
System.out.println("删除文档成功"); } catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
}
六 总结
关于mongodb,redis,mysql 简要对比,其实这篇文章写得很好,我给个结论就行了
https://www.cnblogs.com/lovychen/p/5613986.html
mongodb:
它是一个内存数据库,操作的数据都是放在内存里面的。
但实际数据存在硬盘中,mmap的方式可以说是索引在内存中。
持久化方式:
mongodb的所有数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。mongodb就在这块区域里面进行数据修改,避免了零碎的硬盘操作。
至于mmap上的内容flush到硬盘就是操作系统的事情了,所以如果mongodb在内存中修改了数据后,mmap数据flush到硬盘之前,系统宕机了,数据就会丢失。
redis:
它就是一个不折不扣的内存数据库了。
redis所有数据都是放在内存中的,持久化是使用RDB方式或者aof方式。
mysql:
无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。
总结就是
虚拟内存不够是 选择mongodb和mysql
虚拟内存够是 选择mongodb和redis
但实际上,更多公司选择redis和mysql,这就是技术栈的问题,毕竟nosql的定义和开发设计没几个程序员了解
最新文章
- PHPMyAdmin弱口令猜解【Python脚本】
- 数据结构:JAVA_二叉数查找树基本实现(上)
- Win10 IoT C#开发 3 - GPIO Pin 控制发光二极管
- HDU 4283---You Are the One(区间DP)
- TextView 字数限制
- js获取一个对象的所以属性和值
- AMBA interconnector PL301(一)
- .net 添加Cookie的4种方法
- tomcat path配置
- C#中转义字符
- 跨域请求,jsonp
- HTML5之indexedDB
- mysql常用的函数
- Docker 核心技术之网络管理
- 使用xshell+xmanager+pycharm搭建pytorch远程调试开发环境
- Luogu3676 小清新数据结构题(树链剖分+线段树)
- 2-scala集合
- 2Q - Fibbonacci Number
- 整数对(hdu1271)找规律
- equals 与 == 的区别
热门文章
- C# 自定义颜色
- 又来一波!Android精品源码分享
- SpringMVC 学习笔记(文件的上传和下载)
- try catch 块中debug时发现错误细节的一次记录
- 【Qt官方例程学习笔记】Application Example(构成界面/QAction/退出时询问保存/用户偏好载入和保存/文本文件的载入和保存/QCommandLineParser解析运行参数)
- Android运行时Crash自动恢复框架-Recovery
- .NET 中文件嵌套,例如:cshtml文件下面嵌套css和js【机器翻译】
- 业务、数据记录——ThreadPool.QueueUserWorkItem及Redis的实现
- nginx优化配置大全
- fs-hasher工具介绍