mongodb基础操作之聚合操作、索引优化


更好的阅读体验 https://www.wolai.com/wrMtYWKdkzKYjoWM1i64qu


目录

  • 聚合操作

    • 聚合管道操作

    • Map-Reduce操作

  • 使用索引优化查询

    • 索引操作

      • 查看索引

      • 查看索引大小

      • 创建索引

      • 删除索引

聚合操作

聚合管道操作

$group 将集合中的文档进行分组,便于后续统计结果


$limit 用于限制MongoDB聚合管道返回的文档数


$match 用于过滤数据,只输出符合条件的文档


$sort 将输入的文档先进行排序,再输出


$project 用于修改输入文档的结构(增加,删除字段等)和名称


$skip 在聚合管道中跳过指定数量的文档,并返回剩余的文档


具体语法:

# $group
db.COLLECTION_NAME.aggregate([{$group:{<key1>:"$<key2>"}}]).pretty()# $limit
db.COLLECTION_NAME.aggregate({$limit:整型数字}).pretty()# $match
db.COLLECTION_NAME.aggregate([{$match:{<key>:<value>}}]).pretty()# $sort, -1表示降序, 1表示升序
db.COLLECTION_NAME.aggregate([{$sort:{<key>:-1 or 1}}]).pretty()# $project
db.COLLECTION_NAME.aggregate([{$project:{<key>:<value>}}]).pretty()# $skip
db.COLLECTION_NAME.aggregate({$skip:整型数字}).pretty()

group: 将集合中的文档按userid进行分组

db.firstCollection.aggregate([{$group:{"_id": "$userid"}}]).pretty()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xOzMu1nz-1654414283983)(image/image_r0sE7bJ0xd.png)]

limit:指定集合只展示两个文档

db.firstCollection.aggregate({$limit:2}).pretty()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCo96aVa-1654414283984)(image/image_UNzxZXRVDa.png)]

match: 将集合中的nickname为爱德华的文档查询出来

db.firstCollection.aggregate([{$match:{"nickname":"爱德华"}}]).pretty()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yXiS6Ogh-1654414283985)(image/image_uNqDTLARAW.png)]

sort:将集合中的文档按照age进行降序排序

db.firstCollection.aggregate([{$sort:{"age":-1}}]).pretty()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s9qqpvDc-1654414283985)(image/image_NibFuoUuUz.png)]

project: 展示集合中的文档,并且文档均不包含字段_id,articleid,content

 db.firstCollection.aggregate([{$project:{ "_id":0, "articleid":0, "content":0}}]).pretty()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-38uF2dpE-1654414283986)(image/image_h8qIgx1VBk.png)]

skip:跳过集合中_id为5之前的文档(不包含5),只展示_id为5之后的文档

db.firstCollection.aggregate({$skip:5}).pretty()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lo8dbf5G-1654414283986)(image/image_wiS_H6Zlji.png)]


常见管道表达式及相关说明

$sum 计算总和


$avg 计算平均值

db.COLLECTION_NAME


$min 获取集合中所有文档对应值的最小值


$max 获取集合中所有文档对应值的最大值


$push 在结果文档中插入值到一个数组中


$first 获取分组文档中的第一个文档


$last 获取分组文档中的最后一个文档

Map-Reduce操作

MongoDB提供Map-Reduce来进行聚合操作。

db.firstCollection.mapReduce( function() {emit(this.nickname, 1);}, function(key,values) {return Array.sum(values)}, { query:{state:"1"}, out:"comment_total" }
)

输出结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Ztywsa6-1654414283986)(image/image_OV4qxjjBxd.png)]

result:存储结果集

timeMillis:执行Map-Reduce操作所花时间

input:满足筛选条件被输入到map函数的文档次数

emit:在map函数中emit()方法被调用的次数,也就是集合中满足条件的文档数量

output:结果集合中的文档个数

ok:判断执行Map-Reduce操作是否成功,若执行成功则显示1,反之用err表示

使用索引优化查询

MongoDB的索引可以分为6种:单字段索引、复合索引、多键索引、地理空间索引、文本索引和哈希索引

默认的情况下,MongoDB中所有集合在_id字段上都有一个索引。由于MongoDB可以从任何方向遍历索引,因此对于单个字段索引和排序操作来说,索引项的排序顺序并不重要。

若文档的字段为数组类型,则每个字段都是数组中的一个元素,MongoDB将会为数组中的每个元素创建索引,因此被称为多键索引。

索引操作

查看索引

db.COLLECTION_NAME.getIndexes()

查询集合firstCollection中的索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YNhERXma-1654414283987)(image/image_MeZYME4RV9.png)]

返回的结果中有4个字段,分别是v、key、name以及ns,其中字段v表示索引引擎的版本号,字段key表示添加索引的字段,默认是_id,其值为1表示索引是升序方式排序;字段namne表示索引的名称,也就是字段加上_,即_id_;字段ns表示索引存储的命名空间,即数据库test的集合firstCollection中。

查看索引大小

db.COLLECTION_NAME.totalIndexSize()

查询集合firstCollection中的索引大小

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUghtxIU-1654414283987)(image/image_5Ey6xuIt8-.png)]

创建索引

db.COLLECTION_NAME.createIndex(keys,options)

  • keys:该参数的数据类型为文档类型,是包含字段和值的文档,其中字段是索引键,值为描述该字段的索引类型。若指定字段为升序索引,则指定值为1,反之,则指定值为-1

  • options:该参数的数据类型为文档类型,其为可选项,包含一组控制索引创建的选项的文档。常见的选项有unique和name,其中选项unique描述建立的索引是否唯一,若值为true,则创建唯一索引,默认值为false;选项name描述所创建索引的名称,若是未指定名称,MongoDB则会通过连接索引的字段名和排序顺序生成一个索引名称

在集合firstCollection中创建单字段索引,即在userid的字段上创建索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8IVZOejw-1654414283988)(image/image_gaPyPoR1m3.png)]

查看索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vSc25naP-1654414283988)(image/image_GiAPW5xDnA.png)]

创建复合索引,即在userid和nickname的字段上同时创建索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z2QminVK-1654414283988)(image/image_2kQzv0rkOJ.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WLKuYimQ-1654414283989)(image/image_2n_CHtl03S.png)]

删除索引

#删除单个索引

db.COLLECTION_NAME.dropIndex(index)

#删除所有索引

db.COLLECTION_NAME.dropIndexes()

删除userid索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uogGGSXJ-1654414283989)(image/image_Jl5Rj-3Y0d.png)]

删除所有索引

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQdQdSC6-1654414283989)(image/image_Q-v1W_K65K.png)]

mongodb基础操作之聚合操作、索引优化相关推荐

  1. 04 MongoDB各种查询操作 以及聚合操作总结

    基础篇(能解决工作中80%的问题): MongoDB的概述.应用场景.下载方式.连接方式和发展历史等 MongoDB数据类型.重要概念以及shell常用指令 MongoDB文档的各种增加.更新.删除操 ...

  2. java操作es聚合操作并显示其他字段_深入浅析Elasticsearch中的聚合操作

    如果写过Elasticsearch的聚合操作DSL,都知道它非常的繁琐,很简单的业务就导致异常复杂的json.因为它的聚合操作是嵌套的,一个聚合的输出可以是另一个聚合的输入,并且聚合还支持pipeli ...

  3. java操作es聚合操作并显示其他字段_java使用elasticsearch分组进行聚合查询过程解析...

    这篇文章主要介绍了java使用elasticsearch分组进行聚合查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java连接elas ...

  4. java操作es聚合操作并显示其他字段_java使用elasticsearch分组进行聚合查询(group by)-项目中实际应用...

    java连接elasticsearch 进行聚合查询进行相应操作 一:对单个字段进行分组求和 1.表结构图片: 根据任务id分组,分别统计出每个任务id下有多少个文字标题 1.SQL:select i ...

  5. mongodb aggregate 聚合操作

    何为aggregate聚合操作? mongodb的聚合操作,接受一个名为pipeline的参数和一个可选参数. pipeline可以理解为流水线,一条流水线上可以有一个或多个工序.所以,mongodb ...

  6. MongoDB 聚合操作

    MongoDB 聚合操作 在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多 ...

  7. limit mongodb 聚合_MongoDB 聚合操作(转)

    在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...

  8. php数据group去重,MongoDB_Mongodb聚合函数count、distinct、group如何实现数据聚合操作, 上篇文章给大家介绍了Mong - phpStudy...

    Mongodb聚合函数count.distinct.group如何实现数据聚合操作 上篇文章给大家介绍了Mongodb中MapReduce实现数据聚合方法详解,我们提到过Mongodb中进行数据聚合操 ...

  9. python 数据分析(六)astype('category')按类别分组 + 分组聚合操作 + 透视表 + 交叉表 + excel表的数据处理

    文章目录 一.按照类别单独分类astype() 1. astype()用法 二.时间操作 1. 第一种:直接利用to_datetime() 2. 第二种:Series.dt 三.分组聚合操作 1. 分 ...

最新文章

  1. hive lock命令的使用
  2. CSS——float属性备忘笔记
  3. python设计模式(十三):解释器模式
  4. spring:《spring实战》读后感一
  5. 第四范式恭祝大家新年快乐!
  6. javascript --- 数组实用小技巧
  7. H5自定义属性详细介绍
  8. Oracle 9i安装时没有找到OCS4J.properties 解决办法
  9. Matlab连接字符串的方法
  10. 《博弈论与生活》思维导图
  11. SSM实现毕业设计管理系统
  12. connect ETIMEDOUT
  13. 中国象棋中的跳马问题(BFS)
  14. 使用Wifi pineapple(菠萝派)进行Wi-Fi钓鱼攻击
  15. ANSYS常见术语对照
  16. hdu-5761 Rower Bo(数学)
  17. 算法——排序——选择排序图解动画
  18. 方舟服务器商店系统,《方舟:生存进化》转服系统将上线,一键搬家了解一下!...
  19. sql选取连续三天登录的用户
  20. java 气泡聊天消息_Java Swing实现的仿QQ气泡消息聊天窗口效果

热门文章

  1. Java基础:this关键字可在方法参数和成员变量同名时进行区分
  2. Android 交流分享汇总
  3. 伊登十二色环——欢迎评论指导
  4. 单目标跟踪通过CAM绘制heatmap图像(以SiamCAR为例)
  5. CISSP AIO7 学习笔记 - 第一章 安全和风险管理 1.4-1.10小节
  6. 高级软件工程第六次作业:“希希敬敬对”团队作业-3
  7. 工控服务器什么作用,服务器与工控机的用处和区别在哪?
  8. 大数据与云计算学习计划 (一) 云计算系统管理 6 Linux中RPM软件包管理操作 、 Yum软件包仓库操作(概念与实操)
  9. DBA高效入职指南学习笔记
  10. mysql dba 工资,好大夫高级mysql dba工资待遇怎么样 - 好大夫在线 - 职友集