MongoDB数据库系列(二)、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
    }
    
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一宿君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值