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


相关文章
|
7月前
|
NoSQL 测试技术 MongoDB
微服务——MongoDB实战演练——根据上级ID查询文章评论的分页列表
本节介绍如何根据上级ID查询文章评论的分页列表,主要包括以下内容:(1)在CommentRepository中新增`findByParentid`方法,用于按父ID查询子评论分页列表;(2)在CommentService中新增`findCommentListPageByParentid`方法,封装分页逻辑;(3)提供JUnit测试用例,验证功能正确性;(4)使用Compass插入测试数据并执行测试,展示查询结果。通过这些步骤,实现对评论的高效分页查询。
102 0
|
7月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令——MongoDB索引知识概述
本文介绍MongoDB索引相关知识,包括其在查询中的重要作用。索引可避免全集合扫描,显著提升查询效率,尤其在处理海量数据时。通过B树数据结构存储字段值并排序,支持相等匹配、范围查询及排序操作。文中还提供了官方文档链接以供深入学习。
101 0
|
7月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令——MongoDB索引的类型
本节介绍了MongoDB中索引的几种类型及其特点。包括单字段索引,支持升序/降序排序,索引顺序对操作无影响;复合索引,字段顺序重要,可实现多级排序;地理空间索引,支持平面与球面几何查询;文本索引,用于字符串搜索并存储词根;哈希索引,基于字段值散列,适合等值匹配但不支持范围查询。
180 1
微服务——MongoDB常用命令——MongoDB索引的类型
|
7月前
|
存储 NoSQL 定位技术
MongoDB索引知识
MongoDB索引是提升查询性能的关键工具,通过构建特殊的数据结构(如B树)优化数据访问路径。无索引时,查询需全集合扫描,时间复杂度为O(n);使用索引后可降至O(log n),实现毫秒级响应。MongoDB支持多种索引类型:单字段索引适用于高频单字段查询;复合索引基于最左前缀原则优化多条件过滤和排序;专业索引包括地理空间索引(支持LBS服务)、文本索引(全文搜索)和哈希索引(分片键优化)。合理选择和优化索引类型,可显著提升数据库性能。建议使用explain()分析查询计划,并定期清理冗余索引。
|
9月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
303 17
|
10月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
372 9
|
11月前
|
存储 NoSQL 关系型数据库
MongoDB索引知识
MongoDB索引知识
96 1
MongoDB索引知识
|
11月前
|
存储 NoSQL MongoDB
MongoDB 索引限制
10月更文挑战第22天
183 2
|
11月前
|
NoSQL MongoDB 索引
MongoDB 高级索引
10月更文挑战第22天
85 2
|
12月前
|
存储 NoSQL MongoDB
MongoDB 查询分析
10月更文挑战第21天
96 1

推荐镜像

更多