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高级的主要内容,如果未能解决你的问题,请参考以下文章

使用YCSB测试MongoDB的微分片性能

使用YCSB测试MongoDB的微分片性能

PbIdea功能系列之PowerBuilder高级图像处理功能

mongoDB分片集群

MongoDB升级4.0后,这个异常坑了多少人?

php高级进阶系列文章--第五篇(redis基础知识复习)