首页 > 技术文章 > 4_(知识补充)连接mongoDB数据库出现的代码警告

singledogpro 2021-07-07 16:54 原文

4_(知识补充)连接mongoDB数据库出现的代码警告

连接数据库出现的代码警告

第一个警告:旧的解析器准备废弃,要使用新的解析器

(node:4296) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.

解决方法:在connect函数中加入第二个参数, { useNewUrlParser: true } 该参数是一个对象。配置完成后该警告消失。

1st warning
1st warning

mongoose.connect('mongodb://localhost/blog', {useNewUrlParser: true ,useUnifiedTopology: true})

第二个警告:旧的服务器侦听器和监听器准备废弃,因为网络拓扑结构(网络节点的连接方式)更新了

(node:4296) [MONGODB DRIVER] Warning: Current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.

解决方法:在connect函数中加入第二个参数,{ useUnifiedTopology: true } 该参数是一个对象。配置完成后该警告消失。

2nd warning
2nd warning

第三个警告:旧的索引器效率不高,使用新的索引器

(node:14900) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.

解决方法:在开始连接数据库之前,加入以下代码,mongoose.set('useCreateIndex', true) ;

3rd warning
3rd warning

索引拓展

如果没有索引,MongoDB必须执行集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。如果查询存在适当的索引,MongoDB可以使用索引来限制它必须检查的文档数,索引的作用就像是查字典一样,能帮助我们限制数据的选择范围,进一步减少数据库查询的时间和资源,所以可知数据库索引用于加速查询。它有两种数据结构:Hash索引和B+ Tree索引。Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的,所以,对于区间查询是无法直接通过索引查询的,就需要全表扫描。所以,哈希索引只适用于等值查询的场景。而B+ Tree是一种多路平衡查询树,所以他的节点是天然有序的(左子节点小于父节点、父节点小于右子节点),所以对于范围查询的时候不需要做全表扫描。索引的好坏,取决于搜索深度,B+树可以说是制式算法,不只是数据库里会用它。对于有限元素的索引,比如路由表的搜索,哈希的效率可以很高。机械硬盘时代,索引还要考虑硬盘IO。数据库的底层很复杂。

推荐阅读