我对nodejs和mongdb还不熟悉,我将在我的一个项目中使用它们,当我的数据库连接正常工作时,我震惊地发现我的代码实际上有多少数据库连接.下面是一段简单的代码:

var express = require('express');
var mongo = require('mongodb');  
var app = express();

// Further details:
// nodejs: v0.8.18
// mongod: v2.2.2
// node's mongodb driver: v1.2.10

app.get('/', function(req, res){
    res.send('<h1>Ok</h1>');
});

var setUp = function() {   
    // get a handler to the testDB Database
    mongo.Db.connect('mongodb://localhost:27017/testDB', function(err, db) {
        if (err)
            throw err;
        // create a test collection in the database
        db.createCollection('test', function(err, test) {
            if (err)
                throw err;
            // insert a dummy document into the test collection          
            test.insert({'name':'admin', 'pass':'admin'});

            app.listen(3000); 
            console.log('App listening on port 3000');
        });
    });
}

setUp();

当nodejs进程启动时,mongo守护进程输出此日志(log)位:

... connection accepted from 127.0.0.1:40963 #34 (1 connection now open)
... connection accepted from 127.0.0.1:40964 #35 (2 connections now open)
... connection accepted from 127.0.0.1:40965 #36 (3 connections now open)
... connection accepted from 127.0.0.1:40966 #37 (4 connections now open)
... connection accepted from 127.0.0.1:40967 #38 (5 connections now open)
... connection accepted from 127.0.0.1:40968 #39 (6 connections now open)
... end connection 127.0.0.1:40963 (5 connections now open)
... allocating new datafile /var/data/testDB.ns, filling with zeroes...
...

当进程终止时:

... connection 127.0.0.1:40964 (4 connections now open)
... connection 127.0.0.1:40965 (3 connections now open)
... connection 127.0.0.1:40966 (2 connections now open)
... connection 127.0.0.1:40967 (1 connection now open)
... connection 127.0.0.1:40968 (0 connections now open)

mongo驱动程序真的需要与mongod建立那么多连接才能得到一个db处理程序吗?还是我实现这个的方式有问题?我真的希望在那里只看到一个开放的连接...

推荐答案

默认情况下,Db.connect会打开一个包含5个连接的池.如果要将其限制为单个连接,可以通过以下server个选项:

mongo.Db.connect(
    'mongodb://localhost:27017/testDB', 
    {server: {poolSize: 1}}, 
    function(err, db) { ...

Mongodb相关问答推荐

MongoDB v4.4聚合的$getfield替代方案

Mongo 将一个数组链接到另一个数组

Mongo聚合的具体格式

如何为具有相同名称的嵌套字段创建文本索引

如何更新mongo中列表最后一个对象的属性

分页时根据唯一字段mongodb获取数据

MongoDB:嵌套数组计数+原始文档

如何将 MongoDB 集合中的 _id 字段更改为 User_id?

如何在 MongoDB 中存储时间?作为字符串?给出任意年/月/日?

聚合/元素子文档作为 mongo 中的顶级文档

什么是 Mongoose (Nodejs) 复数规则?

在 MongoDB 中创建简短、唯一的对象 ID

如何在 mongodb 本机驱动程序中对 find() 进行字段 Select ?

有没有办法自动更新 MongoDB 中的两个集合?

MongoDB:查询和检索嵌入式数组中的对象?

如何仅通过一次调用将一组对象保存到mongoose数据库?

Meteor订阅不更新集合的排序顺序

spring 数据MongoDB.生成id的错误

MongoDB:聚合框架: $match between fields

是否可以在 Mongodb 中的两个数据库之间进行 $lookup 聚合?