如何关闭MongoDB服务器的所有连接

时间:2012-01-12 05:08:25

标签: node.js mongodb

我使用Node MongoDB native driver连接到MongoDB数据库:

// Open a connection
db.open(function (err, db) {
  db.close();
});

// Open another connection
db.open(function (err, db) {
  db.close();
});

我在mongodb.log文件中看到了两个连接,但只有一个端连接。程序没有退出,我认为它还在等待关闭第二个连接。你如何关闭所有连接?

1 个答案:

答案 0 :(得分:2)

您正在使用回调参数隐藏变量db

试试这个。

// Open a connection
db.open(function (err, p_db) {
  db.close();
}); 

// Open another connection
db.open(function (err, p_db) {
  db.close();
});

更新:好的,我想我对回调中的参数感到困惑,抱歉。 您的问题(来自要点),是因为您在关闭它们之前使用相同的db对象执行两个db.opens。此外,看起来您需要单独的服务器对象,除非您按顺序执行操作。

所以,你可以做什么,相反,如果你想按顺序保证它(同样,我所拥有的mongodb版本似乎没有定义_serverState,所以我把它改为连接):< / p>

console.log('[1]', db.serverConfig.connected);
db.open(function (err, db) {
  console.log('[2]', err, db.serverConfig.connected);
  db.close();
  console.log('[3]', err, db.serverConfig.connected);

  console.log('[4]', db.serverConfig.connected);
  db.open(function (err, db) {
    console.log('[5]', err, db.serverConfig.connected);
    db.close();
    console.log('[6]', err, db.serverConfig.connected);
  });
});

打印哪些:

[1] false
[2] null true
[3] null false
[4] false
[5] null true
[6] null false

或者,您可以定义两个db变量 - 但是您还需要定义两个服务器变量,或者在第一个变量关闭后挂起。像这样:

var mongodb  = require('mongodb')
  , server   = new mongodb.Server('localhost', 27017, {})
  , server2   = new mongodb.Server('localhost', 27017, {})
  , db       = new mongodb.Db('test', server, {})
  , db2       = new mongodb.Db('test', server2, {})
  ;

console.log('[1]', db.serverConfig.connected);
db.open(function (err, db) {
  console.log('[2]', err, db.serverConfig.connected);
  db.close();
  console.log('[3]', err, db.serverConfig.connected);
});

console.log('[4]', db2.serverConfig.connected);
db2.open(function (err, db2) {
  console.log('[5]', err, db2.serverConfig.connected);
  db2.close();
  console.log('[6]', err, db2.serverConfig.connected);
});

哪些打印(对我而言,我猜你不能指望1,4,2,3 ......):

[1] false
[4] false
[2] null true
[3] null false
[5] null true
[6] null false