我使用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
文件中看到了两个连接,但只有一个端连接。程序没有退出,我认为它还在等待关闭第二个连接。你如何关闭所有连接?
答案 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