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 备份数据目录