MongoDB数据库的学习(一)

tech2026-08-16  3

一、安装MongoDB数据库

安装步骤

去官网下载MongoDB,https://www.mongodb.com/ ,在网站中找到Download按钮。下载会有点忙, 国外的服务器,你懂的。

下载后进行安装,安装没什么难度,但是对于新手建议选择默认安装,而不选择自己配置。等我们完全熟悉后再定制式配置。

安装时如果有安全软件,会报一些拦截,一律允许就好,不允许会安装失败的。

安装完成后,需要配置“环境变量”,目的是再命令行中直接使用,而不需要输入很长的路径了。

如嫌麻烦,或者有问题,在我的资源下载MongoDB安装包,直接解压即可

右键此电脑找到高级系统设置

找到环境变量

新建配置填写你的安装路径 D: … /bin

二、运行MongoDB服务端

安装好MongoDB数据库后,我们需要启用服务端才能使用。启用服务的命令是:Mongod。打开命令行:先打开运行(快捷键win+R),然后输入cmd后回车,就可以打开命令行工具。 执行mongod:在命令中直接输入mongod,但是你会发现服务并没有启动,报了一个exception,服务停止了。新建文件夹:出现上边的错误,是因为我们没有简历Mongodb需要的文件夹,一般是安装盘的根目录,建立data/db,这两个文件夹。运行mongod:这时候服务就可以开启了,链接默认端口是27017。

三、下载Robo3

由于是作项目,所以图形界面比较直观,我们并没有安装图形界面,这里我们使用Robo3来弥补一下。下载地址:https://robomongo.org/download 然后就是下一步下一步安装了。在作软件的时候,我们经常会遇到MVC这个词(Model View Controller),那在Model和Controller这一层经常需要一些工具来进行对接。Mongoose就是Koa和MongoDB的粘合材料(其实也相当于一个驱动),帮助我们完成数据库的操作和通讯。要实现通讯第一步就是实现粘合,软件里叫做连接数据库。这就是这节课我们需要讲的内容。

四、 Koa用Mongoose连接数据库

在作软件的时候,我们经常会遇到MVC这个词(Model View Controller),那在Model和Controller这一层经常需要一些工具来进行对接。Mongoose就是Koa和MongoDB的粘合材料(其实也相当于一个驱动),帮助我们完成数据库的操作和通讯。要实现通讯第一步就是实现粘合,软件里叫做连接数据库。这就是这节课我们需要讲的内容。Mongoose概念Mongoose是一个开源的封装好的实现Node和MongoDB数据通讯的数据建模库Mongoose的安装还是使用npm来进行安装。npm install mongoose --save 连接数据库我们在项目的service文件夹下建立一个database文件夹,用来存放和数据库操作有关的文件。在database文件夹下,建立一个init.js文件,用来作数据库的连接和一些初始化的事情。/service/database/init.jsconst mongoose = require('mongoose') const db = "mongodb://localhost/simle-db" mongoose.Promise = global.Promise exports.connect = ()=>{ //连接数据库 mongoose.connect(db) //增加数据库连接的事件监听 mongoose.connection.on('disconnected',()=>{ //进行重连 mongoose.connect(db) }) //数据库出现错误的时候 mongoose.connection.on('error',err=>{ console.log(err) mongoose.connect(db) }) //链接打开的时候 mongoose.connection.once('open',()=>{ console.log('MongoDB Connected successfully!') }) } 然后在/service/index.js里加入立即执行函数,在使用前记得用require进行引入 connect。//引入connect const {connect} = require('./database/init.js') //立即执行函数 ;(async () =>{ await connect() })() 然后我们在中终端里使用node index.js执行一下,可以看到数据库已经连接成功了。总结:这只是简单的连接,还有一些错误或者是连接中断的业务代码没有编写,我们留到下一节进行编写。作程序都是这样的,先要实现主要功能,然后考试考虑意外情况,减少代码错误,提高健壮性。

五、 Koa用Mongoose连接数据库(2)

上面已经作了基本的数据库连接,并且已经连接成功。但是如果数据没有开启,或网络出现问题,我们并没有作这些意外处理,在写程序时,当主要功能完成时,我们要作意外处理和逻辑处理,让程序增加健壮性。

增加Promise的支持

我们在作这个init.js文件时,必须确保先连接数据库后,再作其他事情,所以我们需要在所有代码的外层增加一个Promise。

return new Promise((resolve,reject)=>{ //把所有连接放到这里 })

连接失败自动重连

一般数据库连接失败,我们会重新连接,但这个重连也是需要有一个次数的,比如连接3次失败,我们在服务端抛出异常。 首先声明一个最大连接数maxConnectTimes.

let maxConnectTimes = 0

当连接断开时,我们进行重连的代码如下:

mongoose.connection.on('disconnected',()=>{ console.log('***********数据库断开***********') if(maxConnectTimes<3){ maxConnectTimes++ mongoose.connect(db) }else{ reject() throw new Error('数据库出现问题,程序无法搞定,请人为修理......') } })

当连接断开时,我们需要把连接次数加1,并重新连接数据库。当重连次数超过3次后,我们抛出了异常,并用reject()通知了promise。 同样当连接出错时,我们也要进行重连操作。

mongoose.connection.on('error',err=>{ console.log('***********数据库错误***********') if(maxConnectTimes<3){ maxConnectTimes++ mongoose.connect(db) }else{ reject(err) throw new Error('数据库出现问题,程序无法搞定,请人为修理......') } })

全部文件如下:

const mongoose = require('mongoose') const db = "mongodb://localhost/smile-db" exports.connect = ()=>{ //连接数据库 mongoose.connect(db) let maxConnectTimes = 0 return new Promise((resolve,reject)=>{ //把所有连接放到这里 //增加数据库监听事件 mongoose.connection.on('disconnected',()=>{ console.log('***********数据库断开***********') if(maxConnectTimes<3){ maxConnectTimes++ mongoose.connect(db) }else{ reject() throw new Error('数据库出现问题,程序无法搞定,请人为修理......') } }) mongoose.connection.on('error',err=>{ console.log('***********数据库错误***********') if(maxConnectTimes<3){ maxConnectTimes++ mongoose.connect(db) }else{ reject(err) throw new Error('数据库出现问题,程序无法搞定,请人为修理......') } }) //链接打开的时 mongoose.connection.once('open',()=>{ console.log('MongoDB connected successfully') resolve() }) }) }

To be continued …

最新回复(0)