最近在弄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倍以上,赶快器试试吧!