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' }});

查询信息

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

多键索引是针对数组

相关推荐
X Chow1 天前
MongoDB Beginner Guide 01:理解 NoSQL、文档模型与 Python 开发环境
数据库·mongodb·nosql
前端双越老师1 天前
如何以前端视角(非0基础)学 Java ?
java·node.js·全栈
小李不困还能学1 天前
基于 51 单片机的8 路抢答器设计教程
单片机·嵌入式硬件·mongodb·抢答器
Kel1 天前
Node.js 没那么复杂
人工智能·node.js·全栈
星栈独行1 天前
Node 接口该写同步还是异步?
服务器·开发语言·后端·程序人生·node.js
小大宇1 天前
mongoDB dump技巧
数据库·mongodb
吴声子夜歌1 天前
MongoDB 4.x——微服务入门
java·mongodb·微服务
曾阿伦2 天前
MongoDB 查询语句备忘手册
数据库·mongodb
星栈2 天前
Node 接口该写同步还是异步?
后端·node.js
半个落月2 天前
用 LangChain 连接远程 MCP:从工具发现到多轮调用闭环
人工智能·后端·node.js