MongoDB数据库系列(二)、MongoDB高级

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。MongoDB数据库系列(二)、MongoDB高级,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

第二章、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
    }
    

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/189482.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!