封裝MongoDB類庫
阿新 • • 發佈:2019-01-01
學習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類庫的封裝