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' }});
查询信息

如果不创建索引,则扫描全文档。
多键索引是针对数组
相关文章
Restify中接入Socket.io报Error:Can’t set headers的错误解决
这篇文章主要给大家介绍了在Restify中接入Socket.io报Error:Can’t set headers的错误解决方法,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。2017-03-03
Node.js websocket使用socket.io库实现实时聊天室
这篇文章主要为大家详细介绍了Node.js websocket使用socket.io库实现实时聊天室,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-02-02
node.js中express中间件body-parser的介绍与用法详解
这篇文章主要给大家介绍了关于node.js中express中间件body-parser的相关资料,文章通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。2017-05-05


最新评论