我使用 NodeJS 在 MongoDB 中使用数据库池,而不是在每个请求上创建单独的客户端对象。连接池甚至在集合级别也能工作(如果集合在路由之间共享),还是必须通过数据库客户端对象访问集合才能使连接池工作?
例如,考虑以下代码(dbURL 不包含数据库名称):
const dbURL = 'mongodb://127.0.0.1:27017'
const client = new MongoClient(dbURL, {
poolSize: 100
});
client.connect((err, db)=>{
if (err) {
console.log('ERROR in database connection!');
reject();
return;
}
const userCollection = db.db('mydb').collection('users);
//userCollection is shared between routes
});
如果 userCollection 在各个路由之间共享,数据库池仍然有效吗?或者它只在客户端级别工作(我的代码中名为 db 的对象)?它也可以在数据库级别工作( db.db('mydb') - 返回实际数据库)吗?
换句话说,连接池的工作级别是什么?
a.客户端对象级别
b.数据库级别
c.收藏级别
最佳答案
您问题的答案是a。客户端对象
想象一下您要去商店。拥有客户端对象
就像已经在商店一样。切换数据库和集合类似于选择购买哪个。您已经在商店了,所以选择要买的东西是免费的。
这里是docs说,只要你调用 MongoClient.connect 一次,你基本上就已经池化了数据库连接。 mongodb 驱动程序处理其余的复杂性。
关于node.js - MongoDB 中集合级别的数据库池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61939753/