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