gpt4 book ai didi

javascript - 使用 NodeJS 和 Mongoose 在 MongoDB 中打开多个连接

转载 作者:行者123 更新时间:2023-11-30 14:25:13 30 4
gpt4 key购买 nike

我是 Node 和 MongoDB 的新手,如果我听起来太幼稚,请原谅我。

我有一个创建到 MongoDB 连接的数据库类

db.service.js

const mongoose = require("mongoose");
const fs = require("fs");
const dbConfigs = JSON.parse(fs.readFileSync("/configs.json"));
const dbHost = dbConfigs.DB_HOST;
const dbName = dbConfigs.DB_NAME;
const dbPort = dbConfigs.DB_PORT;
const dbUrl = "mongodb://" + dbHost + ":" + dbPort + "/" + dbName;
const dbOptions = {
useNewUrlParser: true
};

let dbConnection = mongoose.createConnection(dbUrl, dbOptions);
exports.getConnection = () => {
if (dbConnection)
return dbConnection;
}

exports.closeConnection = () => {
if (dbConnection)
return dbConnection.close();
}

接下来我有另一个模块为 MongoDB 创建 Schema

schema.js

const connection = require("./db.service").getConnection();
const Schema = require("mongoose").Schema;

const SampleSchema = new Schema({...})

exports.Sample = connection.model("Sample", SampleSchema);

然后我有另一个模块利用这个模式来保存对象

logger.js

const Sample = require("./schema").Sample;

exports.log = () => {

let body = {....};
let sampleObj = new Sample(body);
return sampleObj.save(sampleObj);

主模块

Main.js

const logger = require("./logger");

for (let i=0; i < 100; i++) {
logger.log();
}

当我运行 node Main.js 时,所有内容都已保存,但是当我使用命令 db.serverStatus.connections 检查 MongoDB 时,我看到有 6 个连接打开。

我不知道它是怎么到达那里的。我知道命令 mongo 本身保持连接打开,但其他 5 个连接来自哪里?

我检查了this ,这似乎表明 Mongoose 为一个应用程序打开了 5 个连接,但我的应用程序只触发了一个事务,那么哪里需要打开 5 个连接呢?一个人不行吗?

最佳答案

Mongoose 自己管理连接;它试图优化请求的速度。

你看到它就像你只使用一个事务,但在幕后 Mongoose 可能做的比你预期的要多得多。


您可以使用参数 poolSize 修改 mongoose 可以打开的连接数。


示例:

const dbOptions = {
useNewUrlParser: true,
poolSize: 1,
};

尝试将 poolSize 设为 1,看看执行交易需要多少时间,您就会得到答案。

关于javascript - 使用 NodeJS 和 Mongoose 在 MongoDB 中打开多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52057021/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com