mongoDB(二)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: mongoDB

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')

df79bedddd1d464691cb4fe4ba2bb484.png

测试:age添加索引情况
语法:db.c1.createIndex({age:1})
继续:db.c1.find({age:18}).explain('executionStats')

f3e35e6fdfa743929c728698da2726d5.png

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

  • 为常做条件、排序、分组的字段建立索引
  • 选择唯一性索引 (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"}]
})
1
2

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


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2月前
|
存储 监控 NoSQL
MongoDB介绍
MongoDB介绍
44 1
|
6月前
|
NoSQL atlas MongoDB
MongoDB
“【5月更文挑战第27天】”
63 2
|
存储 NoSQL 关系型数据库
什么时候选择MongoDB
什么时候选择MongoDB
91 2
|
存储 NoSQL 定位技术
MongoDB的特点
MongoDB的特点
420 1
|
存储 NoSQL MongoDB
Mongodb(一)
Mongodb(一)
|
JSON NoSQL MongoDB
初学mongoDB(一)
初学mongoDB
81 0
|
消息中间件 分布式计算 NoSQL
MongoDB适用场景
MongoDB适用场景
|
存储 分布式计算 NoSQL
MongoDB的主要特点
MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
157 0
|
NoSQL JavaScript 关系型数据库
MongoDB使用实际很简单
MongoDB是个文档型数据库,虽然前有CouchDB夹击,后有MySQL 8.x文档支持的追赶,但是丝毫不影响它在市场中占据的份额。
|
存储 NoSQL 索引
什么场景应该用 MongoDB ?
月初在云栖社区上发起了一个 MongoDB 使用场景及运维管理问题交流探讨 的技术话题,有近5000人关注了该话题讨论,这里就 MongoDB 的使用场景做个简单的总结,谈谈什么场景该用 MongoDB? 很多人比较关心 MongoDB 的适用场景,也有用户在话题里分享了自己的业务场景,比如 案