在connection.close()之后的MongoDB连接不总是closures

我有一个nodejs应用程序正在做一些mongodb数据库迁移。

所有这一切开始

MongoClient.connect(`mongodb://${databaseHostname}:${databasePort}/${options.databaseName}`, (connectionError, dbConnection) => { if (connectionError) { return cb(connectionError); } console.log('Opened connection to', databaseHostname, options.databaseName); return cb(null, dbConnection); }); 

并以

 console.log('Close'); dbConnection.close((err) => { if (err) console.log(err); console.log('Closed'); }); 

之间有很多事情发生,新的集合创build,文件重新排列等,但从来没有一个新的连接打开。 该应用程序的输出是:

 Opened connection to localhost testDatabase 

[这里有很多其他的日志]

 Close Closed 

数据库日志是

 2016-07-18T16:54:29.400+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54336 #848 (1 connection now open) 2016-07-18T16:54:29.423+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54337 #849 (2 connections now open) 2016-07-18T16:54:29.426+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54338 #850 (3 connections now open) 

[很多插入和更新在这里]

 2016-07-18T16:58:06.493+0200 I NETWORK [conn849] end connection 127.0.0.1:54337 (2 connections now open) 2016-07-18T16:58:06.494+0200 I NETWORK [conn850] end connection 127.0.0.1:54338 (1 connection now open) 

正如你所看到的,即使调用了dbConnection.close()来阻止nodejs应用程序退出,一个mongodb连接仍然保持打开状态。 我现在看了很长一段时间,但不明白是什么原因导致了这种行为?

如果要closures连接,请尝试在成功连接后使用.finally()或.then()语句吗?

就像是

 MongoClient.connect(`mongodb://${databaseHostname}:${databasePort}/${options.databaseName}`, (connectionError, dbConnection) => { if (connectionError) { return cb(connectionError); } console.log('Opened connection to', databaseHostname, options.databaseName); return cb(null, dbConnection); }).then( () => { dbConnection.close((err) => { if (err) console.log(err); console.log('Closed'); }); }); 

无论如何,我最近做了一些关于MongoDB连接的研究,有些他们说不build议closures你的数据库。 为什么build议不要在Node.js代码中的任何地方closuresMongoDB连接?

这个链接可能会进一步帮助你的问题。

http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html