mongoose连接数据库

2022-04-22 MongoDB 阅读 830 次

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官方的查找搜索引擎,使用该配置后,findOneAndUpdatefindOneAndRemove将使用MongoDB的findAndModify接口,将该值设置为false即可。

  • useCreateIndex - 使用自定义索引,默认值false

    当对字段使用自定义索引的时候(即:indexunique)必须将该项设置为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('未初始化'))
0条评论
...