mongoDB(二)

本文详细介绍了MongoDB的聚合查询,包括概念、常用管道和表达式,并提供了实例练习。同时,探讨了数据库索引的优缺点,展示了创建、删除和查看索引的语法。接着,讲解了MongoDB的权限机制,包括角色和开启验证模式的步骤。最后,讲解了数据库的备份与还原操作,如mongodump和mongorestore的使用。
摘要由CSDN通过智能技术生成

MongoDB聚合查询

概念

聚合查询:
顾名思义就是把数据聚起来,然后统计

语法

db.集合名称. aggregate([
{管道:{表达式}}
....
)

常用管道

$group 将集合中的文档分组,用于统计结果
Smatch 过滤数据,只要输出符合条件的文档
$sort 聚合数据进一步排序
$skip 跳过指定文档数
$7imit 限制集合数据返回文档数

常用表达式

$sum 总和 $sum:1同count表示统计
$avg 平均
$min 最小值
$max 最大值

##练习

准备:

use test4
db.c1.insert({_id:1,name:"a",sex:1,age:1})
db.c1.insert({_id:2,name:"b",sex:1,age:2})
db.c1.insert({_id:3,name:"c",sex:2,age:3})
db.c1.insert({_id:4,name:"d",sex:2,age:4})
db.c1.insert({_id:5,name:"e",sex:2,age:5})
  • 统计男生、女生的总年龄

    db.c1.aggregate([
    	{
    		$group:{
    			_id:"$sex",
    			re:{$sum:"$age"}}}])
    
  • 统计男生女生的总人数

    db.c1.aggregate([
    	{
    		$group:{
    			_id:"$sex",
    			rs:{$sum:1}}}])
    
  • 求学生总数和平均年龄

    db.c1.aggregate([
        {
            $group:{
                _id:null,
                total_num:{$sum:1},
                total_avg:{$avg:"$age"}}}])
    
  • 查询男生女生人数,按人数升序

    //升序
    db.c1.aggregate([
    	{$group:{
    		_id:"$sex",
    		rs:{$sum: 1}
    	}},
    	{$sort:{
    		rs:1
    	}}
    ])
    
    //降序
    db.c1.aggregate([
    	{$group:{
    		_id:"$sex",
    		rs:{$sum: 1}
    	}},
    	{$sort:{
    		rs:-1
    	}}
    ])
    

MongoDB优化索引

数据库中的索引

  • 说明:索引是一种排序好的便于快速查询的数据结构
  • 作用:帮助数据库高效的查询数据

##索引优缺点

优点

提高数据查询的效率,降低数据库的IO成本
通过索引对数据进行排序,降低数据排序的成本,降低CPU的消耗。

缺点

占用磁盘空间
大量索引影响SQL语句效率,因为每次插入和修改数据都需要更新索引

语法

  • 创建索引语法: db.集合名.createlndex(待创建索引的列[,额外选项])

  • 参数:

    待创建索引的列:{键:1…,键:-1}
    说明: 1升序 -1降序 例如{age:1}表示创建age索引并按照升序的方式存储额外选项: 设置索引的名称或者唯一索引等等

  • 删除索引语法:

    全部删除: db.集合名.dropIndexes()

    删除指定: db.集合名.droplndex(索引名)

  • 查看索引语法: db.集合名.getIndexes()

练习

注意:向数据库中新增十万条数据

//选择数据库
use test5
//向数据库中添加数据
for(var i = 0;i <100000;i++){
	db.c1.insert({'name':"aaa"+i,"age":i})
}

创建普通索引

需 求: 给name添加普通索引

给name添加普通索引,命令:db.c1.createIndex({name:1})

删除name索引,命令:db.c1.dropIndex("name_1")

给name创建索引并起名web 命令:db.c1.createIndex({name:1},{name:"web})

创建复合/组合索引

需求:给name和age添加组合索引

说明:就是一次性给两个字段建立索引

语法:db.集合名.createIndex({键1:方式,键2:方式})

创建唯一索引

需求:给name添加普通索引

语法: db.集合名.createIndex(待添加索引的列,{unique:列名})

一:删除全部索引,命令:db.c1.dropIndexes()

二:设置唯一索引,命令:db.c1.createIndex({name:1},{unique:true})

分析索引

语法:db.集合名.find().explain(‘executionStats’)

索引扫描方式

COLLSCAN 全表扫描

IXSCAN 索引扫描

FETCH 根据索引去检索指定document

练习

测试:age未添加索引情况
语法:db.c1.find({age:18}).explain('executionStats')
在这里插入图片描述

测试:age添加索引情况
语法:db.c1.createIndex({age:1})
继续:db.c1.find({age:18}).explain('executionStats')
在这里插入图片描述

选择规则(如何选择合适的列创建索引)

  • 为常做条件、排序、分组的字段建立索引

  • 选择唯一性索引 (ps.同值较少如性别字段)

  • 选择较小的数据列,为较长的字符串使用前缀索引 (ps.索引文件更小)

MongoDB权限机制

##语法:

db.createUser({
	"user" :"账号"",
	"pwd":“密码",
	"roles" : [{
		role: "角色"db:"所属数据库"
	}]
})

角色

#角色种类
超级用户角色:root
数据库用户角色:reaH、 readwrite;

数据库管理角色:dbAdmin、userAdmin;
集群管理角色: clusterAdminclusterManager.clusterMonitor、hostManager;

备份恢复角色: backup、restore;
所有数据库角色: readAnyDatabase、readwriteAnyDatabase、userAdminAnyDatabdbAdminAnyDatabase

#角色说明
root:只在admin数据库中可用。超级账号,超级权限;

read:允许用户读取指定数据库;
readwrite:允许用户读写指定数据库;
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile;dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限;

开启验证模式

开启验证模式
开启验证模式概念:名词,指用户需要输入账号密码才能登陆使用操作步骤

  • 1.添加超级管理员
  • 2.退出卸载服务
  • 3.重新安装需要输入账号密码的服务(注在原安装命令基础上加上–auth即可
  • 4.启动服务->登陆测试

步骤1:添加超级管理员

mongo

use admin
db.createUser({
 "user":"用户名""pwd":"密码",
 "roles":[{
     role: "root",
     db : "admin"}]
})

步骤2:退出卸载服务

bin\mongob --remove

注意:必须用管理员打开DOS窗口

步骤3:安装需要身份验证的MongoDB服务

bin \mongod --insta1l --dbpath E : \mongodb \ data --logpath E : \mongodb \ logs \mongodb2.1og --auth

步骤4:启动服务 -> 登陆测试

通过超级管理员账号登陆

  • 方法1: mongo服务器IP地址:端口/数据库-u用户名-p密码

  • 方法2: a-先登录,b-选择数据库,c-输入db.auth(用户名,密码)

MongoDB备份还原

备份数据库mongodump

语法:

导出数据语法: mongodump -h -port -u -p -d -o导出语法说明
-h host 服务器IP地址(一般不写默认本机
-port 端口(一般不写默认27017
-u user 账号
-p pwd 密码
-d database 数据库(留心:数据库不写则导出全局

-o open 备份到指定目录下

还原数据库mongorestore

语法:

还原数据语法: mongorestore -h -port -u -p-d–drop备份数据目录还原数据说明:
-h host 服务器IP地址(一般不写默认本机
-port 端口(一般不写默认27017
-u user 账号
-p pwd 密码
-d database 数据库(留心:数据库不写则导出全局
-d 不写则还原全部数据
–drop 先删除数据库再导

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值