MongoDB基础知识点
-
- 1.MongoDB简介
-
- 2.MongoDB安装
-
- 1.Ubuntu22.04
- 2.Windows(非msi)
- 3.MongoDB基本操作
-
- 1.基本概念
- 2.MongoDB文件增删改查(CURD)
-
- 1.插入数据
- 2.查询数据
- 3.修改数据
- 4.删除数据
- 5.删除字段
- 4.MongoDB实战管理系统数据库设计
-
- 1.设计数据库
- 2.Mongodb分页&排序
-
- 3.MongoDB聚合查询
- 4.MongoDB优化索引
-
- 1.概括
- 2.创建索引
- 3.删除索引
- 4.查看索引
- 5.分析索引
- 5.MongoDB权限机制
-
- 1.设置权限
- 2.开启验证模式
- 3.登录(windows)
- 6.MongoDB备份还原
-
1.MongoDB简介
1.1基本信息
- 基于分布式文件存储数据
- C++语言编写
- 支持的数据结构非常松散,是类似json的bson格式(后期插入修改数据写JSON)
1.2作用
1.3下载
2.MongoDB安装
1.Ubuntu22.04
2.Windows(非msi)
bin>mongod --install -dbpath D:\mongodb\data --logpath D:\mongodb\logs\mongodb.log
bin>mongod --dbpath D:\mongodb\data --logpath D:\mongodb\logs\mongodb.log --logappend --serviceName MongoDB --auth --install
bin>net start mongodb
bin>mongo
bin>mongod.exe --remove
bin>sc delete mongodb
net stop mongodb
3.MongoDB基本操作
1.基本概念
show databases
show dbs
- 创建数据库,不建议使用单独命令创建数据库,使用use隐式创建
- 查看当前数据库
db
use 数据库名称
- 删除数据库,通过use选择需要删除的数据库,执行以下命令
db.dropDatabase()
show collections
- 创建集合
- capped: 布尔值,指定是否创建固定。这种集合有大小限制,一旦达到上限,新的文档会覆盖旧的文档,默认为’false’
- size:指定固定集合的大小上限(字节数),只有在创建固定集合时才需要设置
- max: 指定固定集合的文档数上限,只有在创建固定集合时才需要设置
- autoIndexId: 布尔值,指定是否自动为’_id’字段创建索引,默认为true <该字段与Mongodb3.6弃用>
- 其他字段建议参考官方文档
db.createCollection("集合名词",{
capped: true,
size: 5242880,
max: 5000
})
db.集合名称.drop()
db.集合名称.count()
2.MongoDB文件增删改查(CURD)
1.插入数据
- 集合存在,则直接插入数据,集合不存在,则隐式创建<过时>
db.集合名称.insert(json数据)
- insertOne
db.集合名词.insertOne({<文档数据>})
- insertMany
db.集合名词.insertMany([{文档数据1},{文档数据2},{文档数据3},...])
- 查看集合数据
- mongodb会给插入的每条数据插入一个_id,_id的组成为时间戳(4)+机器码(3)+PID(2)+计数器(3)
- 可以自定义_id,只需要在插入的数据中添加_id即覆盖(不推荐使用)
db.集合名称.find()
db.集合名称.insert({},{},{})
- 插入多条数据(且数据量较大时)
- 可以使用js语法,mongodb底层采用的是JS引擎,支持部分JS语法
for(var i = 0;i <= 10; i++){
db.infoT.insert({uname: 'a'+i,age: i+1})
}
2.查询数据
db.集合名称.find(条件 [,查询的列])
db.集合名称.find({键:{运算符: 值}}
运算符 |
作用 |
$gt |
大于 |
$gte |
大于等于 |
$lt |
小于 |
$lte |
小于等于 |
$ne |
不等于 |
$in |
in |
$nin |
not in |
|
|
3.修改数据
- 修改数据
- 是否新增:指条件匹配不到的数据插入(true是插入,false不插入,默认)
- 是否修改多条: 指将匹配成功的数据都修改(true是,默认是false)
- updateOne: 用于更新满足条件的第一个文档
- updateMany: 用于更新满足条件的所有文档
db.集合名称.update(条件,{修改器:{键: 值}})
修改器 |
作用 |
$inc |
递增 |
$rename |
重命名列 |
$set |
修改列值 |
$unset |
删除列 |
4.删除数据
- deleteOne
db.文档名称.deleteOne({条件})
- deleteMany
db.文档名称.deleteMany({条件})
- 删除所有文档
db.文档名称.deleteMany({})
5.删除字段
db.collection.aggregate([
{ $project: {fieldToDelete: 0}},
{$unset: ["fieldToDelete"]}
])
- 删除单个文档方式
- _id用来定位要更新的文档
- fieldToDelete代表需要删除的字段
db.collection.updateOne({_id: docId},{$unset: {fieldToDelete: 1}})
4.MongoDB实战管理系统数据库设计
1.设计数据库
-
确定功能模块所属集合
-
确定集合字段
- UI设计稿每个展示内容对应一个字段
- 创建字段
- 更新字段
- 状态字段
-
练习
- 需求:根据学生管理系统,设置存放学生信息的集合,并插入20条数据
- 代码:
- 先中文
- 集合名词: 学生集合
- 集合字段: 编号、学号、姓名、电话、性别、年龄、学历、备注
- 再英文
use studentInfoList;
for(var num = 0;num <= 30;num++){
db.student.insertOne({
_id: num,
no: "KD"+num,
uname: '华中科技'+num,
tel: "0218522"+num,
sex: '女',
age: num,
edt: '研究生',
remark: "勤奋好学"
})
};
db;
show collections;
db.student.find();
2.Mongodb分页&排序
2.1排序
db.collection.find().sort({key: 1})
db.collection.find().sort({key: -1})
db.collection.find({},{key: 1}).sort({key: 1})
db.collection.find().sort({key1: 1,key2: -1})
2.2分页
db.collection.find().sort({key: 1}).limit(2)
- 查询第二页的数据,每页包含2条数据,skip()函数指定从结果集中跳过的记录数
db.collection.find().sort({key: 1}).skip(2).limit(2)
3.MongoDB聚合查询
db.collection.aggregate([
{管道: {表达式}}
])
管道器 |
说明 |
$group |
将集合中的文档分组,用于统计结果 |
$match |
过滤数据,只要输出符合条件的文档 |
$sort |
聚合数据进一步排序 |
$skip |
跳过指定文档数 |
$limit |
限制集合数据返回文档数 |
表达式 |
说明 |
$sum |
总和 $sum: 1同count表示统计 |
$avg |
平均 |
$min |
最小值 |
$max |
最大值 |
4.MongoDB优化索引
1.概括
- 优缺点
- 优点
- 提高数据查询的效率,降低数据库的IO成本
- 通过索引对数据进行排序,降低数据排序成本,降低CPU的消耗
- 缺点
- 占用磁盘空间
- 大量索引影响SQL语句的效率,每次插入或修改数据都需要更新索引
2.创建索引
db.collection.createIndex({key: 1})
db.collection.createIndex({key1: 1,key2: -1})
db.collection.createIndex({key: 1},{unique: 字段名})
db.collection.createIndex({key: 1},{name: "指定名称"})
3.删除索引
db.collection.dropIndexes()
db.collection.dropIndex(索引名)
4.查看索引
db.collection.getIndexes()
5.分析索引
- 分析索引
- COLLESAN 全表扫描
- IXSCAN 索引扫描
- FETCH 根据索引去检索指定文档
db.collection.find().explain('executionStats')
db.collection.find({age: 88888}).explain('executionStats')
db.stuInfo.createIndex({age: 1});
db.stuInfo.getIndexes();
db.stuInfo.find({age: 88888}).explain('executionStats')
5.MongoDB权限机制
1.设置权限
use 数据库名称
db.createUser({
"user: "账号",
"pwd": "密码",
"roles": [{
role: "角色",
db: "所属数据库"
}]
})
角色种类 |
说明 |
root |
超级用户角色 |
read、readwrite |
数据库用户角色 |
dbAdmin、userAdmin |
数据库管理角色 |
clusterAdmin、clusterManager、clusterMonitor、hostManager |
集群管理角色 |
backup、restore |
备份恢复角色 |
2.开启验证模式
use admin
db.createUser({
"user": "admin",
"pwd": "1234567",
"roles": [{
role: "root",
db: "admin"
}]
})
- 安装需要身份验证的MongoDB服务(windows)
/bin>mongod.exe --install --dbpath D:\MongoDB\data --logpath D:\MongoDB\log\mongodb2.log --auth
/bin>net start mongodb
3.登录(windows)
/bin> mongo 服务器IP地址:端口/数据 -u 用户名 -p 密码
或
mongo
use 数据库名
db.auth(用户名,密码)
6.MongoDB备份还原
1.备份数据库
- 参数解析
- port 数据库端口
- d 数据库(数据库不写则导出全局)
- o 备份数据放入指定目录
/bin>mongodump -h -port -u -p -d -o
2.还原数据库
/bin>mongorestore -h -port -u -p -d --drop 备份数据目录