最近在弄MongoDB的时候 发现只按照官网的方式进行操作的话,性能不行,想着用单例模式封装一下,提升一下性能,代码如下:

//引入mongodb相关的模块
const MongoClient = require("mongodb").MongoClient;
//mongodb数据库的相关配置信息
const config = {
//数据库链接地址
dbUrl:"mongodb://localhost:27017",
//要操作的数据库名称
dbName:"ydb"
};
//创建相应的数据库实体类 //说明:因为操作数据库是一个异步操作 用一个promise解决异步问题 后面在koa中await就可以直接获取值了
class MgondoDb {
//采用单例模式
static getInstance() {
if (!MgondoDb.instance) {
MgondoDb.instance = new MgondoDb();
}
return MgondoDb.instance;
}
constructor(){
this.dbClient = '';
this.connect();
} connect(){ return new Promise((resolve,reject)=>{
if(!this.dbClient){
MongoClient.connect(config.dbUrl,(err,client)=>{
if(err){
reject(err)
}
else {
this.dbClient = client.db(config.dbName);
resolve(this.dbClient)
} });
}
else resolve(this.dbClient)
})
}
insert(collectionName,json){
return new Promise((resolve,reject)=>{
this.connect().then((dbClient)=>{
dbClient.collection(collectionName).insertOne(json,(err,data)=>{
if(err){
reject(err);
return false
}
resolve(data);
});
})
})
}
remove(collectionName,json){
return new Promise((resolve,reject)=>{
this.connect().then((dbClient)=>{
dbClient.collection(collectionName).remove(json,(err,data)=>{
if(err){
reject(err);
return false
}
resolve(data);
});
})
})
}
update(collectionName,wjson,ujson){
return new Promise((resolve,reject)=>{
this.connect().then((dbClient)=>{
dbClient.collection(collectionName).update(wjson,ujson,(err,data)=>{
if(err){
reject(err);
return false
}
resolve(data);
});
})
})
}
find(collectionName,json){
return new Promise((resolve,reject)=>{
this.connect().then((dbClient)=>{
let result = dbClient.collection(collectionName).find(json);
result.toArray((err,data)=>{
if(err){
reject(err);
return false
}
resolve(data);
})
})
})
} }
module.exports = MgondoDb.getInstance();

这样封装之后,MongoDB就处于长链接状态了,除了第一次操作数据库的时候会比较好时间而已,剩下操作数据库的时候,时间就会提升100倍以上,赶快器试试吧!

最新文章

  1. 提升网速的路由器优化方法(UPnP、QoS、MTU、交换机模式、无线中继)
  2. knockout 学习实例4 css
  3. DOS命令下输入:java Hello 出现以下几种结果可能的原因:
  4. C# 如何执行bat文件 传参数
  5. Android应用框架浅析
  6. Android开发-API指南-<instrumentation >
  7. 自动化测试(三):QTP参数化
  8. 解决Dagger2和butterknife冲突
  9. C语言 之 printf () 函数你真的会用吗?
  10. eclipse导出doc文档
  11. C#中的Virtual
  12. 大数据学习系列之一 ----- Hadoop环境搭建(单机)
  13. 来自Composer中文网安装composer指南
  14. SQL Server 之 事务与隔离级别实例讲解
  15. ARC设置
  16. 使用命令行登陆数据库配置文件修改 解决ora12528
  17. LeetCode – Number of Islands
  18. PAT1066(AVL树)
  19. 【windows核心编程】HideProcess
  20. 教你用PS修复老照片

热门文章

  1. Monkey通过安装包获取包名
  2. 吴裕雄--天生自然 JAVA开发学习:集合框架
  3. RDS的xb文件恢复到本地mysql5.6版本数据库
  4. cmd释放重新获取IP
  5. Python实现求1-1000以内的素数
  6. plague|commence|gymnasium|triumph|jump
  7. Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.FAILED
  8. 荼菜的iOS笔记--UIView的几个Block动画
  9. MOOC(7)- case依赖、读取json配置文件进行多个接口请求-执行测试用例(16)
  10. iOS应用程序开发——解决iOS7之前版本与之后版本下app启动图片跳动问题