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

简介: - 排序- 索引类型- 创建索引

2.5.5 MongoDB -- 聚合

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

排序

// 升序
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/

// 使用 explan 查看 mongo 查询过程中的执行情况
db.author.find({"name": "user1"}).explain("executionStats")

创建索引

// 创建索引,-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)
- 嵌套对象字段索引与基本字段的处理方式一致

使用索引的场景:
- 集合较大
- 文档较大
- 选择性查询

// 后台创建索引,如果使用工具线程,可能会阻塞查询
db.people.createIndex({zipcode: 1}, {background: true})



索引基数:数据类型多,索引基数高,索引效率高,如果数据比如性别只有男,女两种数据,索引效率低
目录
相关文章
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
701 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
12月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
933 15
|
12月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
|
10月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
10月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
756 2
|
10月前
|
人工智能 API 数据库
Semantic Kernel .NET 架构学习指南
本指南系统解析微软Semantic Kernel .NET架构,涵盖核心组件、设计模式与源码结构,结合实战路径与调试技巧,助你从入门到贡献开源,掌握AI编排开发全栈技能。
1126 2
|
10月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
632 1
|
10月前
|
人工智能 Kubernetes Cloud Native
Higress(云原生AI网关) 架构学习指南
Higress 架构学习指南 🚀写在前面: 嘿,欢迎你来到 Higress 的学习之旅!
3559 0

推荐镜像

更多