每次查询/插入后都应该打开/关闭数据库连接吗?

问题描述

嘿,每个人我最近几天都在使用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 });
    

我确信猫鼬可以帮助您解决问题。

,

这样做是一个好习惯。这样,在每次操作(插入等)之后,您都要关闭连接,而在每次操作(插入等)之前,您都需要重新打开连接。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...