Javascript 使用MongoDB数据库为每个查询打开一个新连接是否是一个好的做法?

Javascript 使用MongoDB数据库为每个查询打开一个新连接是否是一个好的做法?,javascript,node.js,mongodb,asynchronous,Javascript,Node.js,Mongodb,Asynchronous,我正在创建一个在MongoDB数据库中存储用户数据的web服务器。web请求背后的代码使用异步函数将文档插入数据库,但由于这些函数是异步的,这意味着对于每个请求,都会与服务器建立新的连接 exports.create_user = function(username, password, callback) { mongo.connect(url, function(err, db) { db.collection('users').insertOne({username: user

我正在创建一个在MongoDB数据库中存储用户数据的web服务器。web请求背后的代码使用异步函数将文档插入数据库,但由于这些函数是异步的,这意味着对于每个请求,都会与服务器建立新的连接

exports.create_user = function(username, password, callback) {
  mongo.connect(url, function(err, db) {
    db.collection('users').insertOne({username: username, password: password}, function(err, result) {
      callback(result)
      db.close()
    })
  })
}
我的印象是这样做不是最好的做法,但我想不出一种方法来使用我上面使用的模块模型。任何建议或建议都将不胜感激。

通过执行
db.close()
可以关闭连接,如果不关闭连接,事件循环将保持连接打开,进程将不会退出。如果您正在构建一个不会终止进程的web服务器,则无需关闭连接。
作为参考

我在自己的研究中偶然发现了这一点:在每个查询中使用mongodb的新连接是最佳做法还是使用连接池。事实证明,mongodb建议对大多数用例使用连接池

引自:

连接池是由驱动程序维护的数据库连接缓存,以便在需要与数据库建立新连接时可以重新使用连接。为了减少应用程序创建的连接池数量,建议调用MongoClient.connect一次,并重用回调返回的数据库变量

在触发查询时,我通常使用以下表单来建立和重用连接:

//db.js
从“mongodb”导入{MongoClient};
//这将保存我们的缓存数据库连接,它本身将在一个池中保存多个要使用的连接
让我们联系一下,
数据库
出口{
连接:(下一步)=>{
//已建立?=>返回连接
if(数据库)返回next(未定义,数据库);
//建立联系
MongoClient.connect('http://localhost:27017/admin',(误差,db)=>{
if(err)返回next(err);
//保存连接
连接=分贝;
//连接到数据库
database=db.db('myDatabase');
//回拨
下一步(未定义,数据库);
});
},
断开连接:(下一步)=>{
如果(!connection)返回next();
//密切联系
connection.close();
next();
}
};
触发查询:

从“/db”导入数据库;
数据库连接((错误,数据库)=>{
if(err)返回next(err);
db.collection('myUsers').insertOne({name:'test'},(err)=>{
如果(错误)抛出错误;
数据库断开((错误)=>{
如果(错误)抛出错误;
log('一切完成,数据库连接关闭');
});
});
});
注意:可以手动确定池连接的最大数量(afaik默认值为5?)。关于如何通过mongodb url设置打开的连接数量,请参阅文档