node.js - MongoDB 连接在 connection.close() 之后并不总是关闭

标签 node.js mongodb

我有一个 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');
});

中间发生了很多事情,创建了新的集合,重新排列了文档等等。但是从来没有打开过新的连接。该应用程序的输出是:

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 连接仍保持打开状态。我已经关注这个问题很长时间了,但不明白是什么导致了这种行为?

最佳答案

如果你想关闭连接,你是否考虑过在连接成功后使用.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 连接做了一些研究,有些人说不建议关闭你的数据库。 Why is it recommended not to close a MongoDB connection anywhere in Node.js code?

此链接可能会进一步帮助您解决问题。

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

关于node.js - MongoDB 连接在 connection.close() 之后并不总是关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38440264/

相关文章:

javascript - 以编程方式将文件从 node.js 上传到另一个 Web 服务器

javascript - 通过socket.io-stream流式传输广播图像

node.js - 蒙戈数据库 |从文档数组中删除对象

java - Datanucleus JDO Mongodb - 映射值中抽象的子项未保留

MongoDB、NUMA 硬件、页面错误但有足够的 RAM 用于工作集、touch 命令或 vmtouch/dd 未加载到内存中

javascript - 如何使用 $q.all(promises) 并在网页上显示响应?

node.js - 使用 mongo 和 mongoClient 从同一查询获取不同的投影结果

java - Spring MongoTemplate - 将聚合结果映射到集合(例如 List 和 Map)

javascript - 在 electronjs 中,在主进程中然后在渲染进程中使用 child_process.fork 有什么好处

mongodb - 排序多个条件MongoDB