封装MongoDB类库

学习Koa的时候遇到了mongodb,虽然我的电脑出了点问题不知为什么安装不上,但是看到视频教学感觉还是非常有用的,在此做一下总结

var MongoDB = require('mongodb');
var MongoClient = MongoDB.MongoClient;
//用户Id必须以此属性格式返回。
const ObjectID = MongoDB.ObjectID;
var Config = require('config.js');

class Db {

    //实现单例
    //解决多次实例化,实例不共享的问题
    static getInstance() {
        if (!Db.instance) {
            Db.instance = new Db();
        } else {
            return Db.instance;
        }
    }


    constructor() {
        this.dbClient = ''; //放db对象
        this.connect(); //实例化的时候就连接数据库(第一次查询的速度也变快了)
    }


    connect() { //链接数据库

        let _that = this;

        return new Promise((resolve, reject) => {

            //此处加一个判断,若已有数据库对象则使用之前的,而不是重新连接。
            //如此可以省下上千倍的时间(长连接)
            if (!_that.dbClient) { //解决数据库多次连接的问题
                MongoClient.connect(Config.dbUrl, (err, client) => {
                    if (err) {
                        reject(err);
                    } else {
                        _that.dbClient = client.db(Config.dbName);
                        resolve(db);
                    }
                })
            } else {
                resolve(_that.dbClient)
            }
        })
    }


    find(collectionName, json) {
        return new Promise((resolve, reject) => {
            this.connect().then((db) => {
                var result = db.collection(collectionName).find(json);
                result.toArray((err, docs) => {
                    if (err) {
                        reject(err);
                        return;
                    }
                    resolve(docs);
                })
            });
        })
    }


    update(collectionName, json1, json2) {
        return new Promise((resolve, reject) => {
            this.connect().then((db) => {
                //表名,要更新的数据库名,
                db.collection(collectionName).updateOne(json1, {
                    $set: json2
                }, (err, result) => {
                    if (err) {
                        reject(err);
                    } else {
                        resolve(result)
                    }
                })
            })
        })
    }


    insert(collectionName, json) {
        return new Promise((resolve, reject) => {
            this.connect().then((db) => {
                db.collection(collectionName).insertOne(json, (err, result) => {
                    if (err) {
                        reject(err);
                    } else {
                        resolve(result);
                    }
                })
            })
        })
    }


    remove(collectionName, json) {
        return new Promise((resolve, reject) => {
            this.connect().then((db) => {
                db.collection(collectionName).removeOne(json, (err, result) => {
                    if (err) {
                        reject(err);
                    } else {
                        resolve(result)
                    }
                })
            })
        })
    }


    //mongodb里查询 _id,把字符串转化为对象
    getObjectId(id) {
        return new ObjectID(id);
    }
}

module.exports = Db.getInstance();

过两天更新mysql类库的封装

猜你喜欢

转载自blog.csdn.net/qq_38722097/article/details/83317144