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

查询信息

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

多键索引是针对数组

相关文章

  • nodejs中的http模块与npm模块使用

    nodejs中的http模块与npm模块使用

    这篇文章主要介绍了nodejs中的http模块与npm模块使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • node.js中的path.join方法使用说明

    node.js中的path.join方法使用说明

    这篇文章主要介绍了node.js中的path.join方法使用说明,本文介绍了path.join的方法说明、语法、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • 三分钟教会你用nodejs操作mysql数据库

    三分钟教会你用nodejs操作mysql数据库

    MySQL数据库作为最流行的开源数据库,基本上是每个web开发者必须要掌握的数据库程序之一了,基本使用 node.js上,最受欢迎的mysql包就是mysql模块,下面这篇文章主要给大家介绍了关于如何通过三分钟教会你用nodejs操作mysql数据库,需要的朋友可以参考下
    2023-05-05
  • node.js中ws模块创建服务端和客户端,网页WebSocket客户端

    node.js中ws模块创建服务端和客户端,网页WebSocket客户端

    今天小编就为大家分享一篇关于node.js中ws模块创建服务端和客户端,网页WebSocket客户端,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 使用node.js搭建服务器

    使用node.js搭建服务器

    最近需要完成一个课程设计,被项目经理(组长)分配写界面功能,下面小编通过本文给大家分享使用使用node搭建小型服务器的方法,需要的朋友参考下
    2017-05-05
  • 使用socket.io制做简易WEB聊天室

    使用socket.io制做简易WEB聊天室

    这篇文章主要为大家详细介绍了使用socket.io制做简易WEB聊天室,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • nodejs不用electron实现打开文件资源管理器并选择文件

    nodejs不用electron实现打开文件资源管理器并选择文件

    最近在开发一些小脚本,用 nodejs 实现,其中很多功能需要选择一个/多个文件,或者是选择一个文件夹,这种情况下网上给出的解决方案都是 electron,但是我一个小脚本用 electron 属实有点夸张了,后来转念一想可以通过 powershell 来实现类似的功能,需要的朋友可以参考下
    2024-01-01
  • node.js 和HTML5开发本地桌面应用程序

    node.js 和HTML5开发本地桌面应用程序

    这篇文章主要介绍了node.js 和HTML5开发本地桌面应用程序的相关资料,需要的朋友可以参考下
    2016-12-12
  • 详解koa2学习中使用 async 、await、promise解决异步的问题

    详解koa2学习中使用 async 、await、promise解决异步的问题

    这篇文章主要介绍了详解koa2学习中使用 async 、await、promise解决异步的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • node.js操作mysql(增删改查)

    node.js操作mysql(增删改查)

    本文给大家分享的是使用node.js实现对mysql数据库的增删改查操作,有需要的小伙伴可以参考下,希望对大家学习node有所帮助。
    2015-07-07

最新评论