MongoDB学习笔记(进阶)

126 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情

一、排序&分页

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 数据库中的索引

  1. 说明:索引是一种排序好的便于快速查询的数据结构
  2. 作用:帮助数据库高效的查询数据

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密码

方法二:

  1. 先输入mongo 登录
  2. 选择数据库
  3. 输入db.auth(用户名,密码)

五、备份还原

5.1 备份数据库

mongodump -h -port -u -p- d -o

-hhost服务器IP地址(一般不写,默认本机)
-port端口(一般不写,默认27017)
-uuser账号
-ppwd密码
-ddatabase数据库(若不写则导出全部)
-oopen备份到指定目录下

例: 备份所有数据到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是备份数据目录名

我是孤城浪人,一名正在前端路上摸爬滚打的菜鸟,欢迎你的关注。