已经打包上传到NPM,地址:https://www.npmjs.com/package/opadatabase
已经打包上传到GITHUB,地址:https://github.com/zhuyangmsg/koa-database
Mongodb简单介绍
我们只需要了解两点:
1、快速,数据是存储在物理内存里,读取非常方便
2、存储的类型是json格式
简要分析
1、引用模块
let MongoClient = require("mongodb").MongoClient
2、定义类,在类里面定义方法
3、定义connect连接数据库方法,这里连接数据库是一个异步的过程,要用到promise做异步处理,最后返回的是一个连接库的对象,简称库对象。
connect(){
return new Promise((resolve,rejess)=>{
if(!this.dbaseStore){ //已经建立连接的方法,直接返回参数
MongoClient.connect(dbUrl,{ useNewUrlParser: true } ,(err,db)=>{
if(err) throw err
let dbase = db.db("test");
this.dbaseStore=dbase
resolve(this.dbaseStore)
})
}else{
resolve(this.dbaseStore)
}
})
}
4、定义dbFind查找数据库的方法,这里也有用到promise做异步处理。传入表名和条件,返回查找结果
dbFind(tableName,findContent){
return new Promise((resolve,rejess)=>{
this.connect().then((dbase)=>{
dbase.collection(tableName).find(findContent).toArray((err,response)=>{
if(err) throw err;
resolve(response)
})
})
})
}
注意事项
一、每次调用方法都执行了connect连接数据库方法,这样每次连接都会多产生1秒的耗时。我们可以对connect方法进行优化,当第一次连接的时候才需要连接数据库,把需要的值存储到构造函数(constructor)里面,第二次连接的时候直接返回构造函数(constructor)里变量的值。
二、每次实例化的时候,都会调用构造函数(constructor),构造函数里面的变量会进行初始化,又会产生问题一。解决方式,定义一个静态方法,每次调用的时候,进行判断,已经实例化过的构造函数,把实例化方法存储到成员变量并进行返回。
static initDataBase(){
console.log("静态方法");
if(!this.singleDataBase){ //判断已经实例化过的构造函数,不用再进行实例化,再次实例化数据为初始化,导致每次实例化都会进行数据库的连接,消耗性能。
this.singleDataBase=new opaDataBase()
}
return this.singleDataBase;
}
三、定义静态方法的时候,传入两个参数,第一个-连接url地址,第二个-库名。使用着可以方便的更改连接服务地址和数据库的名字了。
网友评论