1. 程式人生 > >封裝MongoDB類庫

封裝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類庫的封裝