MongoDB学习笔记(进阶)

一、排序&分页

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

总结

MongoDB的知识点基本就是这么多了,掌握后还需要多练习啊,我是孤城浪人,一名正在前端路上摸爬滚打的菜鸟,欢迎你的关注。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值