当前位置: 首页 > news >正文

MongoDB 的索引有哪些 nestjs mongoose示例

MongoDB 的索引有哪些 nestjs mongoose示例

复合索引(Compound Index): 索引多个字段,允许对这些字段的组合进行高效查询。例如,您可以创建一个索引 { name: 1, age: 1 },以便可以快速查询按姓名和年龄排序的结果。

const userSchema = new mongoose.Schema({name: String,age: Number
});userSchema.index({ name: 1, age: 1 });

哈希索引(Hashed Index): 用于哈希键,例如 ObjectId。这可以提高对哈希键的查询性能,因为 MongoDB 不需要扫描整个集合来查找匹配的文档。

const userSchema = new mongoose.Schema({_id: mongoose.Schema.Types.ObjectId
});userSchema.index({ _id: 'hashed' });

地理空间索引(Geospatial Index): 用于地理空间数据,例如点、线和多边形。这允许基于地理位置进行高效的范围查询和最近邻搜索。

const locationSchema = new mongoose.Schema({type: {type: String,enum: ['Point']},coordinates: [Number]
});const placeSchema = new mongoose.Schema({location: locationSchema
});placeSchema.index({ location: '2dsphere' });

全文本索引(Full-Text Index): 用于文本数据,例如字符串和文本字段。这允许对文本内容进行快速全文搜索。

const articleSchema = new mongoose.Schema({title: String,content: String
});articleSchema.index({ title: 'text', content: 'text' });

唯一索引(Unique Index): 确保集合中每个文档的索引字段值都是唯一的。这对于防止重复数据和维护数据完整性非常有用。

const userSchema = new mongoose.Schema({username: {type: String,unique: true}
});

稀疏索引(Sparse Index): 仅为具有索引字段非空值的文档创建索引条目。这可以节省存储空间,并可以提高某些查询的性能。

const userSchema = new mongoose.Schema({preferences: {type: Object,sparse: true}
});

覆盖索引(Covering Index): 包含查询中所需的所有字段,从而避免额外的磁盘访问来检索数据。这可以显着提高查询性能。

const orderSchema = new mongoose.Schema({user: {type: mongoose.Schema.Types.ObjectId,ref: 'User'},product: {type: mongoose.Schema.Types.ObjectId,ref: 'Product'},quantity: Number
});orderSchema.index({ user: 1, product: 1, quantity: 1 }, { unique: true });

相关文章:

  • cpp第二次作业
  • Qt 事件
  • jenkins配置源码管理的git地址时,怎么使用不了 credential凭证信息
  • 大学生实习被企业坑了,教训比较深刻
  • sonarqube使用指北(二)-如何启动一次完整的本地扫描
  • jmeter接口导入方式
  • 鸿蒙 ohpm 的异常报错
  • STM32 ESP8266模块的曲折探索
  • 聚类分析|基于层次的聚类方法及其Python实现
  • Vue.js:构建高效且灵活的Web应用的利器
  • 黑客(网络安全)技术30天速成
  • 二进制源码部署mysql8.0.35
  • c++初阶------c++代码模块
  • c语言文件操作(下)
  • WEB测试之兼容性测试
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • HashMap ConcurrentHashMap
  • Javascript 原型链
  • JavaScript实现分页效果
  • Js基础——数据类型之Null和Undefined
  • Just for fun——迅速写完快速排序
  • Python_OOP
  • 分布式任务队列Celery
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一天一个设计模式之JS实现——适配器模式
  • 最近的计划
  • ​比特币大跌的 2 个原因
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (WSI分类)WSI分类文献小综述 2024
  • (二)JAVA使用POI操作excel
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • :中兴通讯为何成功
  • @ConfigurationProperties注解对数据的自动封装
  • @RestControllerAdvice异常统一处理类失效原因
  • @开发者,一文搞懂什么是 C# 计时器!
  • @取消转义
  • []sim300 GPRS数据收发程序
  • [20171102]视图v$session中process字段含义
  • [C#]C#学习笔记-CIL和动态程序集
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件
  • [I2C]I2C通信协议详解(一) --- 什么是I2C
  • [ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
  • [Linux](16)网络编程:网络概述,网络基本原理,套接字,UDP,TCP,并发服务器编程,守护(精灵)进程