SpringBoot集成mongodb


一.简介

  • mongodb属于NoSQL的一种分布式文档型存储数据库.
  • 由c++编写介于NoSQL和SQL之间.是最像SQL的非关系型数据库. 也具备ACID能力
  • 底层是JSON格式的二进制存储.称BSON.
  • Mongo最大的特点是它支持的查询语言非常强大

特点

  1. 高性能
    MongoDB提供高性能的数据持久性。特别是,对嵌入式数据模型的支持减少了数据库系统上I/O活动。索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。(文本索引解决搜索的需求、TTL索引解决历史数据自动过期的需求、地理位置索引可用于构建各种O2O应用)mmapv1、 wiredtiger、 mongorocks( rocks)、 In-memory等多引擎支持满足各种场景需求Gridfs解决文件存储的需求
  2. 高可用性
    MongoDB的复制工具称为副本集( replica set),它可提供自动故障转移和数据冗余
  3. 高扩展性
    MongoDB提供了水平可扩展性作为其核心功能的一部分。分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展)从3.4开始,MoηgoDB支持基于片键创建数据区域。在一个平衡的集群中, MongoDB将一个区域所覆盖的读写只定向到该区域内的那些片。
  4. 丰富的查询支持
    MongoDB支持丰富的査询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等
  5. 其他特点

​如无模式(动态模式)、灵活的文档模型


二.docker安装 与 yum安装

默认占内存的一半
在这里插入图片描述

2.1 docker安装

docker pull mongo:latest

# -p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
# --auth:需要密码才能访问容器服务。
docker run -d \
-p 27017:27017 \
--restart=always \
--privileged=true \
-v mongo_configdb:/data/configdb \
-v mongo_db:/data/db --name mongo docker.io/mongo --auth 


docker exec -it mongo mongo admin
# MongoDB 6.0 及以上版本使用以下命令
docker exec -it mongo mongosh admin

# 创建一个名为 admin,密码为 123456 的用户
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
db.auth('admin', '123456');

2.2 yum安装

# 1、下载
$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.9.tgz

# 2、解压
$ tar -zxvf mongodb-linux-x86_64-4.0.9.tgz

# 3、改名,放到目录:/usr/local
$ mv mongodb-linux-x86_64-4.0.9 /usr/local/mongodb

# 4、新建必要的文件夹(依次是:数据库 日志 配置文件)
$ cd /usr/local/mongodb
$ mkdir data log etc

# 5、添加系统路径
$ vim /etc/profile

export PATH=$PATH:/usr/local/mongodb/bin

# 6、配置生效
$ source /etc/profile

# 7、查看是否添加
$ echo $PATH

# 或者做软链
ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo

# 配置文件
$ vim etc/mongodb.conf

###############配置内容###############
storage:
  dbPath: /usr/local/mongodb/data #db存放目录
  engine: wiredTiger # 存储引擎
  journal: # 是否启用日志
    enabled: true

systemLog:
  destination: file
  logAppend: true
  path: /usr/local/mongodb/log/mongodb.log #日志输出目录

net:
  port: 27017 #端口
  bindIp: 127.0.0.1


processManagement:
   fork: true #后台启动
###############配置内容###############

启动服务

# 启动服务
mongod --config /usr/local/mongodb/etc/mongodb.conf

# 关闭服务
mongod --config /usr/local/mongodb/etc/mongodb.conf --shutdown

# 或者
killall mongod

外网访问和权限

添加用户
在这里插入图片描述
数据库认证登录
mongo -u username -p password --authenticationDataBase=database

# 本地连接
$ mongo

# 添加用户
> use admin
switched to db admin
# 添加管理员用户
> db.createUser({user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]});

# 添加超级用户
> db.createUser({user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]});

# 查看已有用户
> show users

# 删除单个用户
> db.system.users.remove({user:"XXXXXX"})

# 关闭服务
> db.shutdownServer()

修改配置

# 配置文件
$ vim etc/mongodb.conf


storage:
  dbPath: /usr/local/mongodb/data
  journal:
    enabled: true

systemLog:
  destination: file
  logAppend: true
  path: /usr/local/mongodb/log/mongodb.log

net:
  port: 27017
  bindIp: 0.0.0.0


processManagement:
   fork: true #后台启动

security:
  authorization: enabled

放开MongoDB所使用的端口,并启动服务,进行验证

# 关闭服务
mongod --config /usr/local/mongodb/etc/mongodb.conf --shutdown
# 授权模式启动服务
mongod --config /usr/local/mongodb/etc/mongodb.conf --auth
# 本地连接 - 连接时验证
$ mongo -u username -p password

# 远程连接 - 连接时验证
$ mongo 127.0.0.1/admin -u username -p password

# 远程连接 - 连接后验证
$ mongo 127.0.0.1/admin

> use admin
switched to db admin

> db.auth("username", "password")

# 修改密码
use admin
db.changeUserPassword('用户','密码')

三.命令介绍

mongodb官网指令文档

在这里插入图片描述

3.1集合操作

# 查看集合
show collections
# 创建集合
db.createCollection("user_collection")
# 删除集合
db.user_collection.drop()

创建集合语法扩展
db.createCollection(name,options)
适用场景: 生产者消费者. 日志覆写

字段类型options字段描述
cappedboolean(可选)如果为tue,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早
的文档.
sizenumber(可选) 为固定集合指定一个最大值(字节单位),如果capped为true,也需要指定该字段
maxnumber(可选) 指定固定集合种包含文档的最大数量

3.2 插入操作

show dbs

use test
/*插入一条数据*/
db.user.insertOne({"name":"张三","age":"21"})
/*插入多条数据*/
db.book.insertMany([{"bookName":"哈利波特"},
    {"bookName":"风"}])

/*执行js脚本*/
load("book.js")

3.3 查询操作

语法格式: db.collection.find(query,projection)

  • query 可选,使用查询操作符指定查询条件
  • projection 可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略)。投影时,id为1的时候,其他字段必须是1;id是0的时候,其他字段可以是0;如果没有_id字段约束,多个其他字段必须同为0或同为1。

条件查询
在这里插入图片描述
在这里插入图片描述

/*插入一条数据*/
db.user.insertOne({"name":"张三","age":"21"})
/*插入多条数据*/
db.book.insertMany([
    {"bookName":"哈利波特","id":"1","type":"魔法"},
    {"bookName":"风","id":"2","type":"魔法"},
    {"bookName":"爱","id":"3","type":"爱情"}])
/*查询数据*/
db.user.find()
db.book.find()
db.user.find({"age":"21"})
db.book.find({"type":"魔法"})
db.book.findOne({"type":"魔法"})
// 上面定义的是字符串类型,不能用数值. 查找包含id 1 2 3 的  
db.book.find({"id":{$in:["1","2","3"]}})
// 上面定义的是字符串类型,不能用数值. 查找id小于等于2的  
db.book.find({"id":{$lte:"2"}})
// 根据id降序 
db.book.find().sort({"id": -1})
// 正则表达式查询 
db.book.find({"type":{$regex:"魔"}})
// 分页查询 skip跳过的数据条数  limit限制返回条数
db.book.find().skip((currentPage-1)*size).limit(size)

3. 4 更新文档

语法格式: db.collection.update(query,update,options)

  • query:描述更新的查询条件
  • update:描述更新的动作及新的内容;
  • options:描述更新的选项
    • upsert:可选,如果不存在update的记录,是否插入新的记录。默认false,不插入
    • multi:可选,是否按条件查询出的多条记录全部更新。默认false,只更新找到的第
      条记录
    • writeConcern :可选,决定一个写操作落到多少个节点上才算成功。

在这里插入图片描述

/*插入多条数据*/
db.book.insertMany([
    {"bookName":"哈利波特","id":1,"type":"魔法","number":100},
    {"bookName":"风","id":2,"type":"魔法","number":1024},
    {"bookName":"爱","id":3,"type":"爱情","number":100}])
// 找到id为1的数据.让number属性自增1   第一个参数为查询条件,第二个参数为修改内容
db.book.updateOne({"id":1},{$inc:{"number":1}})
db.book.find({"id":1})
// 更新一条新值
db.book.updateOne({"id":2},{$set:{"bookName":"西游记"}})
db.book.find({"id":2})

在这里插入图片描述


在这里插入图片描述
repalace全文档替换.一条数据全部被覆盖


在这里插入图片描述
默认情况下,findAndModify会返回修改前的“旧”数据。如果希望返回修改后的数据,则可以指定new选

在这里插入图片描述

3.5 删除文档

  • remove 命令需要配合查询条件使用;
  • 匹配查询条件的文档会被删除;
  • 指定一个空文档条件会删除所有文档;
  • 推荐db.book.deleteOne(),db.book.deleteMany()
db.book.deleteOne({"id":2})
db.book.deleteMany({"type":"魔法"})
db.book.deleteMany({"id":{$lt:2}}) // 删除id小于2的
db.book.deleteMany({}) // 删除所有行记录
db.book.deleteMany() //报错

3.6 文档聚合

在这里插入图片描述

#检索books集合中所有文档的计数 
# db.collection.estimatedDocumentCount() 不使用查询过滤器,而是使用元数据返回集合的计数。
db.books.estimatedDocumentCount()
#计算与查询匹配的所有文档
#它执行文档的聚合以返回准确的计数,即使在异常关闭后或分片群集中存在孤立的文档之后也是如此。
db.books.countDocumentCount({favCount:{$gt:50}})
#返回不同type的数组
db.books.distinct("type")
#返回收藏数大于90的文档不同type的数组
db.books.distinct("type",{favCount:{$gt:90}})

注意:聚合练习题前往此处

四.SpringBoot集成Mongodb

引入pom依赖

<!--spring data mongodb-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring:
	data:
		mongodb:
			uri: mongodb://admin:123456@localhost:27017/test?authSource=admin
			#uri等同于下面的配置
			#database: test
			#host: localhost
			#port: 27017
			#username: admin
			#password: 123456
			#authentication-database: admin

使用时注入mongoTemplate

mongodbTemplate 官网api

@Autowired
MongoTemplate mongoTemplate;

@Test
public void testCollection(){
boolean exists = mongoTemplate.collectionExists("emp");
if (exists) {
//删除集合
mongoTemplate.dropCollection("emp");
}
//创建集合
mongoTemplate.createCollection("emp");
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最难不过坚持丶渊洁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值