封装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类库的封装

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值