MoongoDB数据库系列MongoDB高级
Posted 一宿君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MoongoDB数据库系列MongoDB高级相关的知识,希望对你有一定的参考价值。
第二章、MongoDB高级
学习目标
- MongoDB分页&排序
- MongoDB聚合查询
- MongoDB优化索引
- MongoDB权限机制
- MongoDB备份还原
- 实战可视化管理工具
连接mongodb数据库的小技巧
- 在启动mongodb服务后
- 连接mongodb数据库需要打开cmd窗口,然后切换到mongodb的bin目录下,输入mongo指令即可进入。
- 小技巧:
- 然后打开DOS命令窗口(普通用户运行即可)直接输入mongo即可连接上mongodb:
2.1、MongoDB排序&分页
-
插入五条记录
-
实现以年龄降序或升序排列
-
语法:
db.集合名.find().sort({条件字段:1/-1})
-
Limit与Skip方法
-
语法:
db.集合名.find().sort().skip(数字).limit(数字)
说明:skip跳过指定数量(可选),limit限制查询的数量练习:
-
1、降序查询查询2条记录
-
2、降序跳过前2条记录并查询2条记录
-
实战分页
需求:数据库写入10条数据,每页显示2条数据总共5页;
语法:db.集合名.find().skip().limit(2)
skip计算公式:(当前页 - 1) * 每页显示条数
2.2、MongoDB聚合查询
- 语法:
db.集合名称.aggregate([ {管道:{表达式}} .... ])
- 常用管道
$group 将集合中的文档分组,用于统计结果 $match 过滤数据,只要输出符合条件的文档 $sort 聚合数据进一步排序 $skip 跳过指定文档数 $limit 限制集合数据返回文档数
- 常用表达式
$sum 总和 $sum:1 表示同count表示统计 $avg 平均值 $min 最小值 $max 最大值
2.2.1、统计男生和女生的总年龄
2.2.3、统计男生、女生的总人数
2.2.4、求学生总数和平均年龄
2.2.5、查询男生、女生人数,按人数升序或降序
2.3、MongoDB优化索引
-
索引优缺点:
优点:
提高数据查询的效率,降低数据库的IO成本 通过索引对数据进行排序,降低数据排序的成本,降低CPU的消耗。缺点:
占用磁盘空间,大量索引影响SQL语句效率,因为每次插入和修改数据都需要更新索引。 -
创建索引语法:
db.集合名.createIndex({待创建索引的列},{额外选项})
-
参数:
待创建索引的列:{键:1,...,键:-1} #可以一次性创建多个索引 说明:1升序 -1降序 例如{age:1}表示创建age索引并按照升序的方式存储 额外选项:设置索引的名称或者唯一索引等等
-
删除索引语法:
全部删除:db.集合名.dropIndexes() 删除指定:db.集合名.dropIndex(索引名)
-
查看索引语法:
db.集合名.getIndexes()
2.3.1、创建普通索引
- 插入10000条数据
- 创建name列普通索引和查看所有索引
- 删除name列的索引
- 给name创建索引并起名为name_index
2.3.2创建复合/组合索引
-
需求:给name和age添加组合索引
-
说明:就是一次性给两个字段建立索引
-
语法:
db.集合名.createIndex({键1:方式,键2:方式})
-
设置唯一索引,
db.c1.createIndex({name:1}, {unique: "name"})
-
测试唯一索引
db.c1.insert({name: "a"}); db.c1.insert({name: "a"});#设置唯一性索引后,name值不可重复
2.4、分析索引(explain)
- 语法:
db.集合名.find().explain('executionStats')
> db.c7.find().explain('executionStats') { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "test2.c7", "indexFilterSet" : false, "parsedQuery" : { }, "winningPlan" : { "stage" : "COLLSCAN", "direction" : "forward" }, "rejectedPlans" : [ ] }, "executionStats" : { //执行计划相关统计信息 "executionSuccess" : true, //执行成功的状态 "nReturned" : 1, //返回结果集数目 "executionTimeMillis" : 0, //执行所需的时间,毫秒 "totalKeysExamined" : 0, //索引检查的时间 "totalDocsExamined" : 1, //检查文档总数 "executionStages" : { "stage" : "COLLSCAN",//索引扫描方式 "nReturned" : 1, //返回结果集数目 "executionTimeMillisEstimate" : 0,//预估的执行时间,毫秒 "works" : 3, //工作单元,一个查询会被派生为一些小的工作单元 "advanced" : 1, //优先返回的结果集数目 "needTime" : 1, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "direction" : "forward", //方向 "docsExamined" : 1 //文档检查数目 } }, "serverInfo" : { "host" : "matebook13-mini", //本机服务(一般为localhost或者127.0.0.1) "port" : 27017, //MongoDB数据库的连接端口 "version" : "4.4.6", //MongoDB数据库的版本 "gitVersion" : "72e66213c2c3eab37d9358d5e78ad7f5c1d0d0d7" }, "ok" : 1 }
以上是关于MoongoDB数据库系列MongoDB高级的主要内容,如果未能解决你的问题,请参考以下文章