MongoDB基本操作(二)——排序、分页、聚合查询、优化索引等

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB基本操作(二)——排序、分页、聚合查询、优化索引等

文章目录

排序&分页

排序

分页

聚合查询

语法

优化索引

基本操作

分析索引

权限机制

备份还原

Mongoose


排序&分页


排序


语法:db.集合名.find().sort(JSON数据)

说明:键-就是要排序的列/字段,值:1升序 -1降序

使用:对年龄进行降序排序

db.c2.find().sort({age:-1})


分页


语法:db.集合名.find().skip(数字).limit(数字)

说明:skip里的数字指跳过指定数量(可选),limit限制查询的数量

db.c2.find().sort({age:-1}).skip(1).limit(2)


聚合查询


语法


db.集合名称.aggregate([
  {管道:{表达式}}
  ....
])
常用管道:
$group   将集合中的文档分组,用于统计结果
$match   过滤数据,只要输出符合条件的文档
$sort    聚合数据进一步排序
$skip    跳过指定文档数
$limit   限制集合数据返回文档数
....
常用表达式:
$sum 总和 $sum:1同count表示统计
$avg 平均
$min 最小值
$max 最大值
准备:
db.c3.insert({_id:1,name:"a",sex:1,age:1})
db.c3.insert({_id:2,name:"a",sex:1,age:2})
db.c3.insert({_id:3,name:"b",sex:1,age:3})
db.c3.insert({_id:4,name:"c",sex:2,age:4})
db.c3.insert({_id:5,name:"d",sex:2,age:5})
操作:
男女生的总年龄
#_id 必须加,后跟指定列
#rew 求和 返回结果数
db.c3.aggregate([
  {
    $group:{  
      _id:"$sex",       
      res:{$sum:"$sex"}   
  }
  }
])
求男女总人数
db.c3.aggregate([
  {
    $group:{  
      _id:"$sex",       
      res:{$sum:1}   
  }
  }
])
求学生总数和平均年龄
db.c3.aggregate([
  {
    $group:{  
      _id:null,       
      res:{$sum:1},
      total_avg:{$avg:"$age"}
  }
  }
])
查询男生女生人数,升序排序
db.c3.aggregate([
  {$group:{ _id:"$sex",res:{$sum:1}}},
  {$sort:{res:1}}
])

优化索引


基本操作


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


参数:


待创建索引的列:{键:1,…,键:-1}

说明:1升序 -1降序 列入{age:1}表示创建age索引并按照升序的方式存储

额外选项:设置索引的名称或者唯一索引等等

#创建只对单个列为条件的索引
db.c1.create({name:1})
#创建一个自己取名的索引
db.c1.create({name:1},{name:"xzy"})
#创建条件为多个列的组合索引
db.c1.create({name:1,age:-1},{"hh"})
#创建唯一索引
db.c1.createIndex({name:1},{unique:"name"})

删除索引语法:


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

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

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


分析索引


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


说明:


COLLSCAN 全表扫描


IXSCAN索引扫描


FETCH根据索引去检索指定document


权限机制


**开启验证模式概念:**指用户需要输入账号密码才能登陆使用


操作步骤:


1、添加超级管理员

2、退出卸载服务

3、重新安装需要输入账号密码的服务(注在原安装命令基础上加上–auth即可)

4、启动服务-〉登陆测试


步骤一:添加超级管理员

use admin
db.createUser({
              "user":"admin",
              "pwd":"123456",
              "roles":[{
                       role:"root",
                       db:"admin"
                       }]
              })
查看管理员
use admin
show collections
db.system.users.find().pretty()

步骤二:退出卸载服务

//关闭方法db.shutdownServer()  
之后exit

步骤三:安装需要验证的MongoDB服务

#使用--auth参数来开启认证服务
mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --auth --fork
#或在config文件中添加上
security:
  #开启授权认证后再用配置文件来启动即可
  authorization:enabled
需要账号密码的登陆方式:
方法一:
mongo 服务器IP地址:mongo 127.0.0.1/admin -u admin -p 123456
方法二:
mongo进入shell
use admin
db.auth('admin','123456') 返回1则验证成功

例子:

for(var i = 1;i<=10;i++){
db.goods.insert({"name":"goodsName"+i,"price":i})
}
添加用户shop1可以读shop数据库
db.createUser({
              "user":"shop1",
              "pwd":"123456",
              "roles":[{
                       role:"read",
                       db:"shop"
                       }]
              })
添加用户shop2可以读写shop数据库
db.createUser({
              "user":"shop2",
              "pwd":"123456",
              "roles":[{
                       role:"readWrite",
                       db:"shop"
                       }]
              })

备份还原


语法:

在终端中执行,该命令不是mongo命令
导出:mongodump -h -port -u -p -d -o
导出语法说明
-h host 服务器IP地址(一般不写 默认本机)
-port port 端口(不写默认27017)
-u user 用户
-p pwd 密码
-d database 数据库(不写默认导出全部)
-o open 备份到指定目录下
mongodump -u admin -p 123456 -o /Users/didi/xzy文件/mongo
#注意 最新的mongodb版本4.4中,是没有mongodump工具的,需要通过使用brew命令单独下载
#brew install mongodb-database-tools
单独备份一个指定数据库:
mongodump -u shop2 -p 123456 -d shop -o /Users/didi/xzy文件/mongo
#此时好像不能使用admin作为用户来备份,可能是因为这个不是创建在shop中的用户?

Mongoose


官方:http://mongoosejs.com

中文:http://mongosejs.net/

是node中提供操作MongoDB的模块

能过通过Node语法实现MongoDB数据库CURD

从而实现使用node写程序


下载:

npm i mongoose
或者
yarn add mongoose


相关实践学习
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
相关文章
|
1月前
|
存储 NoSQL 关系型数据库
MongoDB索引知识
MongoDB索引知识
31 1
MongoDB索引知识
|
1月前
|
存储 NoSQL MongoDB
MongoDB 索引限制
10月更文挑战第22天
45 2
|
1月前
|
NoSQL MongoDB 索引
MongoDB 高级索引
10月更文挑战第22天
36 2
|
2月前
|
存储 NoSQL MongoDB
MongoDB 查询分析
10月更文挑战第21天
22 1
|
2月前
|
NoSQL MongoDB 索引
MongoDB 覆盖索引查询
10月更文挑战第21天
34 1
|
2月前
|
SQL NoSQL Unix
MongoDB 聚合
10月更文挑战第17天
28 4
|
2月前
|
NoSQL Java MongoDB
MongoDB 排序
10月更文挑战第16天
37 4
|
2月前
|
存储 NoSQL MongoDB
MongoDB 索引
MongoDB 索引
34 3
|
2月前
|
SQL NoSQL MongoDB
MongoDB 查询文档
10月更文挑战第15天
36 1
|
2月前
|
SQL NoSQL 数据处理
深入探索MongoDB的聚合操作
【10月更文挑战第13天】
43 0