问题描述
嘿,每个人我最近几天都在使用nodejs开发一个简单的应用程序,并创建此函数以从mongodb返回客户端实例
const mongodb = require("mongodb");
const { db } = require("../config/env");
const conection = async () => {
try {
const client = await mongodb.MongoClient.connect(db.uri,{
useNewUrlParser: true,useUnifiedTopology: true,});
return client;
} catch (error) {
throw error;
}
};
module.exports = conection;
我将这个简单的功能用于访问数据层并返回已插入的记录
const index = async ({ limit = 10,offset = 0,filter = {} }) => {
const client = await conection();
if (filter._id) {
filter._id = mongodb.ObjectID(filter._id);
}
try {
const collection = client.db("api").collection("user");
const data = await collection
.find({ ...filter })
.skip(offset)
.limit(limit)
.toArray();
return data;
} catch (error) {
throw new Error(error);
} finally {
await client.close();
}
};
我想知道我是否真的需要建立连接并在每次查询时关闭它,还是应该保持连接打开
注意:在这种情况下,我使用的是一个简单的Atlas集群(免费),但我想知道在使用类似postgres的sql银行时是否也应该这样做
解决方法
除非您退出应用程序,否则请先关闭您的连接,然后确保您已这样做。回来执行更多I / O时,请确保使用相同的连接。数据库连接是资源密集型的,应建立的次数尽可能少,并应尽可能多地共享。如果您不选择现有的连接并收到诸如连接池用尽之类的怪异错误,您还可能会遇到诸如ODBC之类的连接中间件问题。了解您的连接器以及如何最有效地使用它,这将是有益的活动:-)
,您可以使用 mongoose 模块来管理MongoDB。
-
安装
npm install mongoose
-
用法
mongoose.connect('mongodb://localhost/test',{ useNewUrlParser: true });
我确信猫鼬可以帮助您解决问题。
,这样做是一个好习惯。这样,在每次操作(插入等)之后,您都要关闭连接,而在每次操作(插入等)之前,您都需要重新打开连接。