目录
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 先删除数据库再导