node.js mongoose index索引操作

 更新时间:2023年12月25日 11:05:26   作者:SuppperSA  
在 Mongoose 中,索引(Index)是一种用于提高查询性能的数据结构,它可以加速对数据库中文档的检索操作,本文给大家介绍
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表示降序),再查询

tourSchema.index({ slug: 1 });

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

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

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

复合索引

tourSchema.index({ price: 1, ratingsAverage: -1 });

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

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

文本索引

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

查询信息

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

多键索引是针对数组

相关文章

  • Restify中接入Socket.io报Error:Can’t set headers的错误解决

    Restify中接入Socket.io报Error:Can’t set headers的错误解决

    这篇文章主要给大家介绍了在Restify中接入Socket.io报Error:Can’t set headers的错误解决方法,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • nodejs密码加密中生成随机数的实例代码

    nodejs密码加密中生成随机数的实例代码

    本篇文章主要介绍了nodejs密码加密中生成随机数的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 详解puppeteer使用代理

    详解puppeteer使用代理

    这篇文章主要介绍了详解puppeteer使用代理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • nvm安装指定版本node失败的解决方法

    nvm安装指定版本node失败的解决方法

    工作中,碰到一个项目需要旧版本的node运行(版本为14.21.3),于是我用nvm isntall 14.21.3按照该版本Node, 出现了报错,所以本文记录一下nvm安装指定版本node失败的解决方法,需要的朋友可以参考下
    2025-04-04
  • Node.JS枚举统计当前文件夹和子目录下所有代码文件行数

    Node.JS枚举统计当前文件夹和子目录下所有代码文件行数

    这篇文章主要介绍了Node.JS枚举统计当前文件夹和子目录下所有代码文件行数,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • nodejs的路径问题的解决

    nodejs的路径问题的解决

    这篇文章主要介绍了nodejs的路径问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Node.js websocket使用socket.io库实现实时聊天室

    Node.js websocket使用socket.io库实现实时聊天室

    这篇文章主要为大家详细介绍了Node.js websocket使用socket.io库实现实时聊天室,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • 使用Node.js实现获取视频详情

    使用Node.js实现获取视频详情

    这篇文章主要为大家详细介绍了如何在Node.js应用程序中实现获取视频详情的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • node.js中express中间件body-parser的介绍与用法详解

    node.js中express中间件body-parser的介绍与用法详解

    这篇文章主要给大家介绍了关于node.js中express中间件body-parser的相关资料,文章通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • 如何制作一个Node命令行图像识别工具

    如何制作一个Node命令行图像识别工具

    这篇文章主要介绍了如何制作一个Node命令行图像识别工具,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12

最新评论