我是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.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个连接?不能只用一个完成吗?
答案 0 :(得分:2)
猫鼬在管理连接本身;它尝试优化请求的速度。
您会看到它就像在使用一次事务,但是在幕后猫鼬可能做的比您预期的要多。
您可以使用参数poolSize
修改可打开的猫鼬连接数。
示例:
const dbOptions = {
useNewUrlParser: true,
poolSize: 1,
};
以poolSize
等于1尝试一下,看看执行交易需要多少时间,您就会得到答案。