mongoose连接数据库
mongoose如何连接数据库,以及连接数据库过程中的一些注意点
前言
mongoose是一个nodejs环境下操作MongoDB数据库的npm包,在进行操作前与所有数据库操作一样,都需要先与目标数据库建立连接。建立连接前需要已下几个准备条件:
- 目标数据库的URL地址(DB_URL)
- 本地含用户名及密码
- 本地不含用户名及密码
- 数据库的端口 - 默认
27017
- 连接的配置选项
- MongoDB数据库的配置选项
- mongoose的配置选项
DB_URL
通过URL地址与数据库建立连接,MongoDB数据库分为:不带用户名密码、带用户名密码。MongoDB数据库默认是没有密码的,需要提前设置。
URL的组成
-
不带用户名密码的
mongodb://
IP地址:
端口号/
数据库名称const DB_URL = "mongodb://127.0.0.1:27017/user" // 本地IP地址127.0.0.1 默认端口号27017 数据库名称user
-
带用户名密码的
mongodb://
用户名:
密码@
主机IP地址:
端口号/
数据库名称const DB_URL = "mongodb://root:123456@127.0.0.1:27017/user" // 用户名root 密码123456
连接数据库
根据DB_URL与目标数据库建立连接
connect
connect(db_url, options, callback) :arrow_right: Promise
通过DB_URL与数据库建立连接。
mongoose.connect(DB_URL, options)
options
在连接数据库时可以根据需求进行连接的配置,连接配置通常用于拓展MongoDB的驱动,配置分为两种:一种是作用于MongoDB的配置,另一种是作用于mongoose的配置。
作用于MongoDB的配置
由于作用于MongoDB的配置过多,不一一列举,可以自行查看MongoDB官方文档中关于options的介绍。 作用于MongoDB的配置选项除了使用options选项的形式,还可以使用URL查询参数的形式。
/* options形式 */
mongoose.connect('mongodb://localhost:27017/user',{poolSize:4})
/* URL查询参数形式 */
mongoose.connect('mongodb://localhost:27017/user?poolSize=4')
作用于mongoose的配置
作用于mongoose的配置有许多,以下只列举出几个常用的配置,其他配置可以参考mongoose.js官方文档
-
useNewUrlParser - 使用新URL解析器,默认
false
旧URL解析器被弃用,新版mongoose中要求该配置必须为
true
,否则将会触发警告 -
useUnifiedTopology - 使用新服务器查找监测引擎,默认
false
旧引擎被弃用,新版mongoose中要求改配置必须为
true
,否则将会触发警告 -
useFIndAndModify - 使用mongoose的搜索修改引擎,默认值
true
由于mongoose自带的搜索引擎比较旧,所以建议使用MongoDB官方的查找搜索引擎,使用该配置后,
findOneAndUpdate
、findOneAndRemove
将使用MongoDB的findAndModify
接口,将该值设置为false
即可。 -
useCreateIndex - 使用自定义索引,默认值
false
当对字段使用自定义索引的时候(即:
index
、unique
)必须将该项设置为true
// 以下配置为最佳配置,建议在所有连接中均使用
mongoose.connect(DB_URL,{
useNewUrlParser:true,
useUnifiedTopology:true,
useFindAndModify:false
})
断开连接
disconnect
disconnect(callback) :arrow_right: Promise
断开当前与数据库的连接
mongoose.disconnect()
连接对象
connection
连接对象中有许多和数据库连接相关的方法和数据。
连接的状态
在连接数据库的过程中存在几种状态:连接中(connecting)、连接成功(connected)、连接错误(error)、连接断开(disconnected)、未初始化(uninitialized)。
states
在connection对象的states属性中可以查看这些状态,以及状态对应的状态码。
console.log(mongoose.connection.states)
/*
'0' : 'disconnected',
'1' : 'connected',
'2' : 'connecting',
'3' : 'disconnecting',
'99': 'uninitialized',
*/
连接状态的监听
on
on(stateName, callback)
更多连接事件可以参考官方文档
mongoose.connect("mongodb://localhost:27017/user")
let connection = mongoose.connection
connection.on("connecting",()=>console.log('连接中'))
connection.on("connected",()=>console.log('连接成功'))
connection.on("disconnecting",()=>console.log('正在断开连接'))
connection.on("disconnected",()=>console.log('断开连接'))
connection.on("error",(error)=>console.log('连接发生错误',error))
connection.on("uninitialized",()=>console.log('未初始化'))