文章目录
一、排序&分页
1. 排序
db.集合名.find().sort(JSON数据)
键:要排序的列
值:1 升序 -1 降序
三条数据按age升序排
三条数据按age降序排
2.分页
db.集合名.find().sort().skip(数字).limit(数字)
skip跳过指定数量(可选),limit限制查询的数量
降序查询两条
升序跳过两条,查询一条
二、 聚合查询
db.集合名.aggregate([{管道:{表达式}...}])
常用管道
$group | 将集合中的文档分组 |
---|---|
$match | 过滤数据,只输出符合条件的文档 |
$sort | 聚合数据进一步排序 |
$skip | 跳过指定文档数 |
$limit | 限制集合数据返回文档数 |
常用表达式 | |
$sum | 总和 $sum:1同count表示统计 |
– | – |
$avg | 平均 |
$min | 最小值 |
$max | 最大值 |
表内信息
按name分组,并统计每组的年龄总和
db.c1.aggregate([
{
$group:{
_id:"$name",//分组标准
rs:{$sum:"$age"}//创建新列rs为分组后各组年龄的和
}
}
])
统计总人数和平均年龄
db.c1.aggregate([
{
$group:{
_id:null,//不分组
total_num:{$sum:1},//统计人数
total_ang:{$avg:"$age"}//计算平均年龄
}
}
])
查询每个名字的人数,按人数升序排序
db.c1.aggregate([
{
$group:{
_id:"$name",//分组标准
rs:{$sum:1}//创建新列rs为分组后各组年龄的和
}
},
{
$sort;{
rs:1
}
}
])
三、 索引
3.1 数据库中的索引
- 说明:索引是一种排序好的便于快速查询的数据结构
- 作用:帮助数据库高效的查询数据
3.2 索引的优缺点
优点:
1.提高数据查询的效率,降低数据库的IO成本。
2.通过索引读数据结构进行排序,降低数据排序的成本,降低CPU的消耗。
缺点:
1.占用磁盘空间。
2.大量索引影响SQL语句的效率,因为每次插入和修改数据都需要更新索引。
3.3 创建索引
db.集合名.createindex(带创建索引的列[额外选项])
参数:待创建索引的列:(键:1,…,键:-1);
说明:1升序,-1降序;
额外选项:设置索引名称或唯一索引等等
3.3.1 普通索引的创建
给name添加索引,升序
db.c1.createIndex({name:1})//name:1表示升序
给name创建索引并起名为webopenfather
db.c1.createIndex(name:1),{name:"webopenfather"}
3.3.2 复合索引的创建
db.集合名.createIndex({列名1:1, 列名2:1})
给name和age添加复合索引
db.集合名.createIndex({name:1, age:1})
3.3.3 唯一索引的创建
db.集合名.createIndex(待添加索引的列,{unique:列名})
给name添加唯一索引
db.c1.createIndex({name:1},{unique:"name"})
添加了唯一索引的列名不能重复
3.4 删除索引
3.4.1 全部删除
db.集合名.dropindex()
3.4.2 指定删除
db.集合名.dropindex(索引名)
删除name列的索引
db.c1.dropindex(name的索引名)
3.5 查看索引
db.集合名.getIndexs()
查看集合c1的索引
db.c1.getIndexs()
3.6 分析索引
db.集合名.find().explain('executionStats')
3.7 选择规则(如何选择合适的列创建索引)
- 为常做条件、排序、分组的字段建立索引
- 选择唯一性索引
- 选择较小的数剧列,为较长的字符串使用前缀索引
四、权限机制
实战工作中不允许在DOS窗口输入命令就可以登录数据库,所以要使用权限机制,开启验证模式。
步骤:
1、添加超级管理员
2、退出卸载服务
3、重新安装需要输入账号密码的服务(注:在原安装命令基础上加上–auth即可)
4、启动服务 -> 登录测试
4.1 创建账号
db.createUser({
"user":"账号",
"pwd":"密码",
"roles":[{
role:"角色",
db:"所属数据库"
}]
})
角色
超级用户角色 | root |
---|---|
数据库用户角色 | read, readwrite |
数据库管理角色 | dbAdmin, userAdmin |
集群管理角色 | clusterAdmin, clusterManager, clusterMonitor, hostManager |
备份恢复角色 | backup, restore |
所有数据库角色 | readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase, dbAdminanyDatabase |
角色说明
root | 只在admin数据库可用 |
---|---|
read | 只允许用户读取指定数据库 |
readWrite | 允许用户读写指定数据库 |
4.2 退出卸载服务
bin\mongod --remove
4.3 安装需要身份验证的MongoDB服务
bin\mongod --install --dbpath 数据库保存路径 --logpath 日志文件保存路径和日志文件名 --auth
注意:若在初次创建服务时就是创建的需要身份验证的服务,那么4.2 和4.3步骤可以省略。
4.4 启动服务 -> 登录测试
方法一:
mongo 服务器IP地址:端口号/数据库 -u 用户名 -p密码
方法二:
- 先输入mongo 登录
- 选择数据库
- 输入
db.auth(用户名,密码)
五、备份还原
5.1 备份数据库
mongodump -h -port -u -p- d -o
-h | host | 服务器IP地址(一般不写,默认本机) |
---|---|---|
-port | 端口(一般不写,默认27017) | |
-u | user | 账号 |
-p | pwd | 密码 |
-d | database | 数据库(若不写则导出全部) |
-o | open | 备份到指定目录下 |
例: | ||
备份所有数据到E:\mongodb\bak |
mongodump -u admin -p 8888 -o E:\mongodb\bak
将shop数据库数据备份数据E:\mongodb\bak
mongodump -u admin -p 8888 -d shop-o E:\mongodb\bak
5.2 还原数据库
mongorestore -h -port -u -p --drop 备份数据目录
–drop | 先删除数据库再导入,不写则覆盖 |
---|---|
-d | 不写则全部还原 |
例: | |
还原全部数据库 |
mongorestore-u admin -p 8888 --drop E:\mongodb\bak
还原shop数据库
mongorestore-u admin -p 8888 --drop E:\mongodb\bak\shop
shop是备份数据目录名
总结
MongoDB的知识点基本就是这么多了,掌握后还需要多练习啊,我是孤城浪人,一名正在前端路上摸爬滚打的菜鸟,欢迎你的关注。