特点
如无模式(动态模式)、灵活的文档模型
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');
# 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官网指令文档
# 查看集合
show collections
# 创建集合
db.createCollection("user_collection")
# 删除集合
db.user_collection.drop()
创建集合语法扩展
db.createCollection(name,options)
适用场景: 生产者消费者. 日志覆写
字段 | 类型 | options字段描述 |
---|---|---|
capped | boolean | (可选)如果为tue,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早 |
的文档. | ||
size | number | (可选) 为固定集合指定一个最大值(字节单位),如果capped为true,也需要指定该字段 |
max | number | (可选) 指定固定集合种包含文档的最大数量 |
show dbs
use test
/*插入一条数据*/
db.user.insertOne({"name":"张三","age":"21"})
/*插入多条数据*/
db.book.insertMany([{"bookName":"哈利波特"},
{"bookName":"风"}])
/*执行js脚本*/
load("book.js")
语法格式: db.collection.find(query,projection)
/*插入一条数据*/
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)
语法格式: db.collection.update(query,update,options)
/*插入多条数据*/
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})
默认情况下,findAndModify会返回修改前的“旧”数据。如果希望返回修改后的数据,则可以指定new选
项
db.book.deleteOne({"id":2})
db.book.deleteMany({"type":"魔法"})
db.book.deleteMany({"id":{$lt:2}}) // 删除id小于2的
db.book.deleteMany({}) // 删除所有行记录
db.book.deleteMany() //报错
#检索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}})
注意:
聚合练习题前往此处
引入pom依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-mongodbartifactId>
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");
}