新手问题:Nodejs 每次操作mongo都要connect,close?
新手问题:Nodejs 每次操作mongo都要connect,close?
var MongoClient = require(‘mongodb’).MongoClient;
MongoClient.connect(“mongodb://localhost:27017/integration_test”, function(err, db) { test.equal(null, err); test.ok(db != null);
db.collection(“replicaset_mongo_client_collection”).update({a:1}, {b:1}, {upsert:true}, function(err, result) { test.equal(null, err); test.equal(1, result);
db.close();
test.done();
}); }); 这样太不科学了把
用mongoose等模型工具来写,能省心不少 …
恩! 我看看,谢谢。 var db = MongoClient.connect(“mongodb://localhost:27017/integration_test”); 我试着这样写,但是报错了,大家是怎么做的了?每次都connect,close吗?为什么这么做了?
为啥不科学,挺科学的
新手不懂,为啥呢?给我讲讲撒
能不用回调方式来连接数据库吗
数据库有最大连接数的限制
用链接池吧, nodejs不适合使用短连接, 用连接池只需要维护这个连接池就好了
恩,用mongo 是为了简便,结果发现比mysql还麻烦,还是决定用mysql了,mysql2预处理,链接池这些都有
把所有数据库操作写在mongo.open的回调里面,不用一直开关
对于这个问题,确实每次操作数据库都进行连接和关闭并不是最高效的方法。通常我们会使用一个全局的数据库连接实例,或者使用连接池来管理数据库连接。
示例代码
这里提供一个使用mongodb
模块并且保持连接持久性的方法:
const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017";
const dbName = 'integration_test';
let dbInstance;
async function connectToDatabase() {
if (!dbInstance) {
const client = new MongoClient(url, { useNewUrlParser: true, useUnifiedTopology: true });
await client.connect();
console.log("Connected to MongoDB!");
dbInstance = client.db(dbName);
}
return dbInstance;
}
async function updateDocument() {
const db = await connectToDatabase();
db.collection("replicaset_mongo_client_collection").update(
{ a: 1 },
{ b: 1 },
{ upsert: true },
(err, result) => {
if (err) throw err;
console.log(result);
}
);
}
// 使用示例
updateDocument().then(() => {
console.log("Update operation completed.");
}).catch(error => {
console.error("Error during update:", error);
});
解释
- connectToDatabase: 这个函数负责连接到数据库,并确保只创建一个连接实例。如果已经存在连接实例,则直接返回该实例。
- updateDocument: 这个函数执行更新操作。它首先调用
connectToDatabase
获取数据库连接,然后对集合进行操作。
这种方式可以避免频繁地建立和关闭数据库连接,从而提高应用性能。