mongodb基础操作之聚合操作、索引优化
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基础操作之聚合操作、索引优化相关推荐
- 04 MongoDB各种查询操作 以及聚合操作总结
基础篇(能解决工作中80%的问题): MongoDB的概述.应用场景.下载方式.连接方式和发展历史等 MongoDB数据类型.重要概念以及shell常用指令 MongoDB文档的各种增加.更新.删除操 ...
- java操作es聚合操作并显示其他字段_深入浅析Elasticsearch中的聚合操作
如果写过Elasticsearch的聚合操作DSL,都知道它非常的繁琐,很简单的业务就导致异常复杂的json.因为它的聚合操作是嵌套的,一个聚合的输出可以是另一个聚合的输入,并且聚合还支持pipeli ...
- java操作es聚合操作并显示其他字段_java使用elasticsearch分组进行聚合查询过程解析...
这篇文章主要介绍了java使用elasticsearch分组进行聚合查询过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java连接elas ...
- java操作es聚合操作并显示其他字段_java使用elasticsearch分组进行聚合查询(group by)-项目中实际应用...
java连接elasticsearch 进行聚合查询进行相应操作 一:对单个字段进行分组求和 1.表结构图片: 根据任务id分组,分别统计出每个任务id下有多少个文字标题 1.SQL:select i ...
- mongodb aggregate 聚合操作
何为aggregate聚合操作? mongodb的聚合操作,接受一个名为pipeline的参数和一个可选参数. pipeline可以理解为流水线,一条流水线上可以有一个或多个工序.所以,mongodb ...
- MongoDB 聚合操作
MongoDB 聚合操作 在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多 ...
- limit mongodb 聚合_MongoDB 聚合操作(转)
在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...
- php数据group去重,MongoDB_Mongodb聚合函数count、distinct、group如何实现数据聚合操作, 上篇文章给大家介绍了Mong - phpStudy...
Mongodb聚合函数count.distinct.group如何实现数据聚合操作 上篇文章给大家介绍了Mongodb中MapReduce实现数据聚合方法详解,我们提到过Mongodb中进行数据聚合操 ...
- python 数据分析(六)astype('category')按类别分组 + 分组聚合操作 + 透视表 + 交叉表 + excel表的数据处理
文章目录 一.按照类别单独分类astype() 1. astype()用法 二.时间操作 1. 第一种:直接利用to_datetime() 2. 第二种:Series.dt 三.分组聚合操作 1. 分 ...
最新文章
- hive lock命令的使用
- CSS——float属性备忘笔记
- python设计模式(十三):解释器模式
- spring:《spring实战》读后感一
- 第四范式恭祝大家新年快乐!
- javascript --- 数组实用小技巧
- H5自定义属性详细介绍
- Oracle 9i安装时没有找到OCS4J.properties 解决办法
- Matlab连接字符串的方法
- 《博弈论与生活》思维导图
- SSM实现毕业设计管理系统
- connect ETIMEDOUT
- 中国象棋中的跳马问题(BFS)
- 使用Wifi pineapple(菠萝派)进行Wi-Fi钓鱼攻击
- ANSYS常见术语对照
- hdu-5761 Rower Bo(数学)
- 算法——排序——选择排序图解动画
- 方舟服务器商店系统,《方舟:生存进化》转服系统将上线,一键搬家了解一下!...
- sql选取连续三天登录的用户
- java 气泡聊天消息_Java Swing实现的仿QQ气泡消息聊天窗口效果
热门文章
- Java基础:this关键字可在方法参数和成员变量同名时进行区分
- Android 交流分享汇总
- 伊登十二色环——欢迎评论指导
- 单目标跟踪通过CAM绘制heatmap图像(以SiamCAR为例)
- CISSP AIO7 学习笔记 - 第一章 安全和风险管理 1.4-1.10小节
- 高级软件工程第六次作业:“希希敬敬对”团队作业-3
- 工控服务器什么作用,服务器与工控机的用处和区别在哪?
- 大数据与云计算学习计划 (一) 云计算系统管理 6 Linux中RPM软件包管理操作 、 Yum软件包仓库操作(概念与实操)
- DBA高效入职指南学习笔记
- mysql dba 工资,好大夫高级mysql dba工资待遇怎么样 - 好大夫在线 - 职友集