node.js 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' }});
查询信息
如果不创建索引,则扫描全文档。
多键索引是针对数组
相关文章
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
今天小编就为大家分享一篇关于node.js中ws模块创建服务端和客户端,网页WebSocket客户端,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-03-03nodejs不用electron实现打开文件资源管理器并选择文件
最近在开发一些小脚本,用 nodejs 实现,其中很多功能需要选择一个/多个文件,或者是选择一个文件夹,这种情况下网上给出的解决方案都是 electron,但是我一个小脚本用 electron 属实有点夸张了,后来转念一想可以通过 powershell 来实现类似的功能,需要的朋友可以参考下2024-01-01详解koa2学习中使用 async 、await、promise解决异步的问题
这篇文章主要介绍了详解koa2学习中使用 async 、await、promise解决异步的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-11-11
最新评论