封装mongodb ------ db.js

var MongoDB=require('mongodb');
const MongoClient=MongoDB.MongoClient;
const ObjectID=MongoDB.ObjectID;
var Config=require('./config.js');
class Db{
    static getInstance(){
        if(!Db.instance){
            Db.instance=new Db();
        }
        return Db.instance;
    }
    constructor(){
        this.dbClient='';//属性放db对象
        this.connect();//如果这个不隐藏,相当于实例化的时候就连接数据库,运行的时候就连上数据库了,查询数据的时候第一次也快了(隐藏的时候数据库查询比较慢需要连接数据库)
    }
    connect(){//连接数据库
       return new Promise( (res,rej) =>{
           if(!this.dbClient){//解决数据库多次连接问题
               MongoClient.connect(Config.dbUrl,(err,client)=>{
                   if(err){
                       rej(err);
                   }else{
                       var db=client.db(Config.dbName);
                       this.dbClient=db;
                       res(this.dbClient);
                   }
               })
           }else{
               res(this.dbClient);
           }
       })
    }
    find(collectionName,json){
        return new Promise( (res,rej)=> {
            this.connect().then(function (db) {
                var result= db.collection(collectionName).find(json);
                result.toArray((err,docs)=>{
                   if(err){
                       rej(err);
                       return;
                   }
                   res(docs);
                });
            });
        })
    }
    update(collectionName,json1,json2){
        return new Promise((res,rej)=>{
            this.connect().then((db)=>{
                //db.user.update({},{$set:{}})
                db.collection(collectionName).updateOne(json1,{
                    $set:json2
                },function (err,result) {
                    if(err){
                        rej(err);
                        return;
                    }
                    res(result);
                })
            })
        })
    }
    insert(collectionName,json){
        return new Promise((res,rej)=>{
            this.connect().then((db)=>{
                db.collection(collectionName).insertOne(json,function (err,result) {
                    if(err){
                        rej(err);
                        return;
                    }
                    res(result);
                })
            })
        })
    }
    remove(collectionName,json){
        return new Promise((res,rej)=>{
            this.connect().then((db)=>{
                db.collection(collectionName).removeOne(json,function (err,result) {
                    if(err){
                        rej(err);
                        return;
                    }
                    res(result);
                })
            })
        })
    }
    getObjectId(id){//mongodb 里面查询_id 把字符串转换成对象
        return new ObjectID(id);
    }
}
module.exports=Db.getInstance();


//测试 start

var myDb=Db.getInstance();
setTimeout(()=>{
    console.time('start')
    myDb.find('user',{username:'李四'}).then(function (data) {
        // console.log(data);
        console.timeEnd('start')

    });
},100)
setTimeout(()=>{
    console.time('start1')
    myDb.find('user',{username:'李四'}).then(function (data) {
        // console.log(data);
        console.timeEnd('start1')

    });
},3000)
var myDb2=Db.getInstance();
setTimeout(()=>{
    console.time('start3')
    myDb2.find('user',{username:'李四'}).then(function (data) {
        // console.log(data);
        console.timeEnd('start3')

    });
},6000)
setTimeout(()=>{
    console.time('start4')
    myDb2.find('user',{username:'李四'}).then(function (data) {
        // console.log(data);
        console.timeEnd('start4')

    });
},8000)
//输出结果
// start: 1071.404ms
// start1: 4.701ms
// start3: 2.601ms
// start4: 2.638ms
//测试end




你可能感兴趣的:(封装mongodb ------ db.js)