node.js mongoose index(索引)

目录

简介

索引类型

单索引

复合索引

文本索引


简介

在 Mongoose 中,索引(Index)是一种用于提高查询性能的数据结构,它可以加速对数据库中文档的检索操作

索引类型

单索引、复合索引、文本索引、多键索引、哈希索引、地理位置空间索引、通配符索引

单索引

在了解索引之前先看一下mongoDb库,库中集合tours有400条数据,有slug、ratingAverage、price、summary等字段,接下来就是对以上四个字段做索引

我们查询slug为the-forest-hiker的文档,在 MongoDB 中,explain方法用于获取有关查询执行计划的详细信息,为Query的原型方法,调用:const queryInfo = await query.explain(),查看执行结果

其中totalDocsExamined为400,表示扫描了400个文档,nReturend为1表示匹配并返回文档的数量为1。

查询一条数据就需要把整个集合全部扫描效率过于低,当文档个数少的情况下可以忽略查询速度,如果文档个数数以万计,那么就要优化查询速度,所以需要索引。

为slug添加索引,schema.index({ slug: 1 }) (1表示升序,-1表示降序),再查询

javascript 复制代码
tourSchema.index({ slug: 1 });

也可在定义schema的时候设置文档字段的schemaType的index为true

此时totalDocsExamined为1,表示只扫描了1个文档,极大的提高了查询速度。

当执行query后,slug_1的Usage为1,表示索引命中了一次。

复合索引

javascript 复制代码
tourSchema.index({ price: 1, ratingsAverage: -1 });

同时为两个字段添加索引,表示先对price进行升序,然后在同price的情况下进行ratingsAverage降序。

查询price大于等于1000并且ratingsAverage大于等于4的文档,查询详细信息totalDocsExamined为5,nReturend为5,如果不设置复合索引,对两个字段进行复合查询的时候,会对全文档进行查询匹配。

文本索引

javascript 复制代码
tourSchema.index({ summary: 'text' });
javascript 复制代码
 const doc = await tourModel.find({ $text: { $search: 'National' }});

查询信息

如果不创建索引,则扫描全文档。

多键索引是针对数组

相关推荐
Python私教17 小时前
把开源 Agent 打包成"解压双击即用"的 Windows 便携包:一条命令的完整实现
node.js
没事别瞎琢磨20 小时前
十一、审计与 Run Session——每一步操作都被记录
人工智能·node.js
没事别瞎琢磨20 小时前
十六、AgentSandbox——把所有模块串起来的编排类
人工智能·node.js
没事别瞎琢磨20 小时前
十二、网络代理与白名单规则引擎
人工智能·node.js
没事别瞎琢磨20 小时前
十四、Git Worktree 隔离执行
人工智能·node.js
没事别瞎琢磨21 小时前
十、统一 Runner 入口——能力检测与模式回退
人工智能·node.js
没事别瞎琢磨21 小时前
八、环境隔离——构建安全的子进程环境
人工智能·node.js
是一个Bug1 天前
MongoDB:像搭积木一样存数据
数据库·mongodb
没事别瞎琢磨1 天前
六、输出捕获与截断
人工智能·node.js
没事别瞎琢磨1 天前
七、敏感路径预检——Protected Paths
人工智能·node.js