.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})



索引基数:数据类型多,索引基数高,索引效率高,如果数据比如性别只有男,女两种数据,索引效率低
目录
相关文章
|
8月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
650 59
|
8月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
689 2
|
8月前
|
人工智能 Kubernetes Cloud Native
Higress(云原生AI网关) 架构学习指南
Higress 架构学习指南 🚀写在前面: 嘿,欢迎你来到 Higress 的学习之旅!
3023 0
|
11月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
1364 0
|
人工智能 Cloud Native 容灾
深圳农商银行三代核心系统全面投产 以云原生架构筑牢数字化转型基石
深圳农商银行完成第三代核心系统全面上云,日均交易超3000万笔,峰值处理效率提升2倍以上。扎根深圳70余年,与阿里云共建“两地三中心”分布式云平台,实现高可用体系及全栈护航。此次云原生转型为行业提供可复制样本,未来将深化云计算与AI合作,推动普惠金融服务升级。
832 17
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
550 4

推荐镜像

更多