Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 聚合)--学习笔记

.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 聚合)--学习笔记

原创
作者头像
郑子铭
修改于 2021-01-05 02:24:35
修改于 2021-01-05 02:24:35
40800
代码可运行
举报
运行总次数:0
代码可运行

2.5.5 MongoDB -- 聚合

  • 排序
  • 索引类型
  • 创建索引

排序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 升序
db.getCollection('author').find({}).sort({"age": 1}).limit(20)

// 降序
db.getCollection('author').find({}).sort({"age": -1}).limit(20)

// 组合
db.getCollection('author').find({}).sort({"age": 1, "name": -1}).limit(20)

索引类型

  • 单键索引
  • 复合索引
  • 多键索引
  • 地理空间索引
  • 文本索引
  • 索引属性
  • 唯一索引
  • TTL索引
  • 不区分大小写索引
  • 稀疏索引
  • 部分索引

https://docs.mongodb.com/manual/indexes/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用 explan 查看 mongo 查询过程中的执行情况
db.author.find({"name": "user1"}).explain("executionStats")

创建索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建索引,-1 代表降序方式创建
db.collection.createIndex( { name: -1 } )

// 复合索引
db.products.createIndex( { "item": 1, "stock": 1 } )

//多键索引
{ _id: 1, item: "ABC", ratings: [ 2, 5, 9 ] }

db.survey.createIndex( { ratings: 1 } )

//地理空间索引
db.places.insert(
   {
      loc : { type: "Point", coordinates: [ -73.97, 40.77 ] },
      name: "Central Park",
      category : "Parks"
   }
)

db.places.createIndex( { loc : "2dsphere" } )

//文本索引,一个集合只能创建一个
db.reviews.createIndex( { comments: "text" } )

db.reviews.createIndex(
   {
     subject: "text",
     comments: "text"
   }
 )
 
// 索引属性(唯一索引)
db.members.createIndex( { "user_id": 1 }, { unique: true } )

// 索引属性(TTL索引),可以设置过期时间
db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )

// 索引属性(不区分大小写索引)
db.collection.createIndex( { "key" : 1 },
                           { collation: {
                               locale : <locale>,
                               strength : <strength>
                             }
                           } )
                           
// 索引属性(稀疏索引)
db.addresses.createIndex( { "xmpp_id": 1 }, { sparse: true } )

// 索引属性(部分索引)
db.restaurants.createIndex(
   { cuisine: 1, name: 1 },
   { partialFilterExpression: { rating: { $gt: 5 } } }
)

覆盖索引:所有查询字段是索引的一部分,所有查询返回字段在同一个索引中

低效操作:

  • 取反效率低(比如不等于,因为等于会命中索引,取反不会)
  • $nin 总是进行全表扫描
  • 一次查询只能使用一个索引,$or 除外,但 $or 使用多个索引查询之后再将结果进行合并的效率并不高,所以不推荐使用(尽可能使用$in)
  • 嵌套对象字段索引与基本字段的处理方式一致

使用索引的场景:

  • 集合较大
  • 文档较大
  • 选择性查询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 后台创建索引,如果使用工具线程,可能会阻塞查询
db.people.createIndex({zipcode: 1}, {background: true})

索引基数:数据类型多,索引基数高,索引效率高,如果数据比如性别只有男,女两种数据,索引效率低

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 写入和查询)--学习笔记
https://docs.mongodb.com/manual/tutorial/insert-documents/
郑子铭
2021/01/02
7770
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 写入和查询)--学习笔记
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记
robt 3t 下载地址: https://download.studio3t.com/robomongo/windows/robo3t-1.4.2-windows-x86_64-8650949.exe
郑子铭
2021/01/02
5760
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记
MongoDB索引
创建索引的api,3.0之后使用createIndex,ensureIndex已经废弃 * 对于单字段索引,排序的顺序是升序还是降序无关紧要
字母哥博客
2020/09/23
1.7K0
MongoDB系列6:MongoDB索引的介绍
1、前言 和关系型数据库一样,MongoDB的索引可以提高查询执行效率。索引就好比书中的目录,可以快速定位书中某一页。适当的索引查询,优化器可以快速地返回结果集。 2、MongoDB支持的索引类型 在MongoDB主要支持以下几种索引类型: ·单列索引 ·复合索引 ·多键索引 ·全文索引 ·地理空间索引 ·哈希索引 2.1 单列索引 在MongoDB中,每个集合都会默认创建一个唯一索引列”_id”,”_id”列是最基本的单列索引。 创建单列索引可以使用以下语法: db.collection.cre
大数据和云计算技术
2018/03/30
3.3K0
MongoDB系列6:MongoDB索引的介绍
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记
https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp/LighterApi
郑子铭
2021/01/06
3600
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记
005.MongoDB索引及聚合
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
木二
2019/07/01
2.6K0
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记
将业务从controller 抽取到 Lighter.Application 层,并为业务建立抽象接口 Lighter.Application.Contract层
郑子铭
2021/01/07
5430
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记
MONGO笔记
collection集合存储,存储未bson数据或者文档 2.集合创建相关操作 创建集合
用户2954508
2025/07/31
970
从青铜到黄金,对着mysql学,一文搞定mongoDB
项目中使用的技术五花八门,接触了很多新技术,之前也没用过mongo,今天恶补一下基础的知识,开始吧。
香菜聊游戏
2021/09/08
8620
从青铜到黄金,对着mysql学,一文搞定mongoDB
MongoDB 单键(列)索引
MongoDB支持基于集合文档上任意列创建索引。缺省情况下,所有的文档的_id列上都存在一个索引。基于业务的需要,可以基于一些重要的查询和操作来创建一些额外的索引。这些索引可以是单列,也可是多列(复合索引),多键索引,地理空间索引,文本索引以及哈希索引等。 本文主要描述在基于文档上的单列来创建索引。 一、创建语法 语法:db.collection.createIndex(keys, options) keys: 一个包含字段和值键值对的文档,指定该键即在该键上
Leshami
2018/08/13
1.1K0
MongoDB 单键(列)索引
mongodb创建索引和删除索引和背景索引background
MongoDB的背景索引允许在后台创建和重建索引,而不会对数据库的正常操作产生影响。背景索引的创建过程是非阻塞的,可以在业务运行时创建或重建索引,而不会中断其他操作。这使得我们可以在生产环境中安全地创建和维护索引,而不必担心对数据库性能造成负面影响。
oktokeep
2024/10/09
7150
索引系列:2dsphere索引
MongoDB Manual (Version 4.2)> Indexes > 2dsphere Indexes
MongoDB中文社区
2020/05/11
3.2K0
索引系列:2dsphere索引
MongoDB权威指南学习笔记(2)--设计应用
索引的值是按照一定顺序排列的,因此,使用索引键对文档进行排序非常快。然而,只有在首先使用索引键进行排序时,索引才有用。
earthchen
2020/09/24
8.8K0
[953]mongo创建索引及索引相关方法
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
周小董
2021/03/11
3.9K0
[953]mongo创建索引及索引相关方法
MongoDB 部分索引(Partial Indexes)
a、部分索引就是带有过滤条件的索引,即索引只存在与某些文档之上 b、满足过滤条件的文档在查询时,其执行计划将使用该列上的索引,否则不会被使用 c、稀疏索引与部分索引的差异是一个是基于某些文档存在的列,一个是列上的某些匹配条件的值 d、可以基于某个列上创建索引,而在另外的列来使用过滤条件
Leshami
2018/08/08
1.9K0
[置顶] 数据库MongoDB查询语句--持续更新
链接:https://pan.baidu.com/s/1RjU1BXq2rXFG07Zaw5BHrQ 提取码:o1w5
JQ实验室
2022/01/11
4K0
MongoDB入门(三)
指定删除Array中的某一个元素,只要满足条件,就会将Array中所有满足条件的数据全部清除掉
传说之下的花儿
2023/11/25
3400
MongoDB入门(三)
MongoDB入门实战教程(9)
前面我们学习了如何套用常见的设计模式打造合适的模型设计,本篇我们来看看在MongoDB中如何使用索引来提高查询效率。
Edison Zhou
2021/07/01
1.8K0
MongoDB分组查询
MongoDB分组查询 设置显示要查询的列 显示 device_id,device_name,online_status,video_diag_time db.getCollection('vqd_result_his').find({},{device_id:1,device_name:1,online_status:1,video_diag_time:1}) 不显示 device_id,其他都显示 db.getCollection('vqd_result_his').find({},{device_i
编程随想曲
2022/04/21
2.4K0
索引实操练习
向 mydoc 集合中,插入多条数据,mydoc 之前是没有存在过的,我们直接使用 db.mydoc.insertMany() ,mongodb 会默认给我们新建这个集合
阿兵云原生
2023/02/16
3290
推荐阅读
相关推荐
.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 写入和查询)--学习笔记
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档