当前位置: 首页 > 知识库问答 >
问题:

connection.close后MongoDB连接不总是关闭()

房子昂
2023-03-14

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

如您所见,一个mongodb连接保持打开状态,即使dbConnection。close()被调用以阻止nodejs应用程序退出。我已经看了很长一段时间了,但不明白是什么导致了这种行为?

共有1个答案

潘翊歌
2023-03-14

如果您想关闭连接,您是否尝试过在成功连接后使用。

差不多

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连接做了一些研究,他们说不建议关闭数据库。为什么建议不要关闭节点中任何位置的MongoDB连接。js代码?

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

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

 类似资料:
  • 我的MongoDB数据库具有快速增长的活动连接量。 我编写了一个代码来测试连接创建/关闭流程是如何工作的。这段代码总结了我如何在项目中使用库。 我发现了一件很奇怪的事,我不明白。根据我们创建新连接的方式(同步/异步),行为会有所不同。 如果我们同步创建连接-mongo在调用方法。 如果我们异步创建连接,mongo即使在调用方法。 > 是否有其他方法强制关闭连接插座? 它会在一段时间后自动关闭这些打

  • 我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)

  • 我正在使用GlassFish JMS连接工厂。连接最终关闭。并且最大池大小被设置为5。 测试用例:我从invoker()在3秒内不断发送10条消息。 结果:前5条消息成功发送,第6条消息之后的消息无法分配更多连接。这意味着之前的5个连接仍然是开放的。 问题connection.close()后多久释放连接轮询? 问题JMS connection.close()之后垃圾收集器是否负责释放连接? 这是

  • 我将spring data mongodb(1.7.0.RELEASE)与spring webmvc框架一起用于我的web应用程序。我使用mongoRepository使用基本的CRUD函数,但我没有在代码中关闭mongo连接,因为我以为spring data mongodb会自己关闭它,但它会继续打开新连接,而不是关闭它们。这些太多的连接导致我的应用程序崩溃,我必须一次又一次(每天两次)重新启动

  • 问题内容: 这是我的第一个Spring Boot代码。不幸的是,它总是关闭。我希望它能够连续运行,以便我的Web客户端可以从浏览器中获取一些数据。 请指教。 谢谢 PS build.gradle是错误。 一旦我以粗体显示了以上内容,一切正常。我的应用程序上下文现在是正确的。谢谢戴夫 问题答案: 解决方法:该应用程序不是Web应用程序,因为它在类路径上没有嵌入式容器(例如Tomcat)。加一个固定的

  • 在nodejs中,根据每个请求打开mongodb连接,然后在回调中关闭它是一种好做法吗? 有人说,没有必要在每个请求上打开/关闭mongodb连接,因为一旦打开,就可以共享一个连接池。 问题是如何维护和共享该池?猫鼬已经自动做到了吗? 尤其是在mongodb超时或断开连接时,是否需要重新连接? 我在这里发现了相互矛盾的答案:是否根据请求关闭mongodb连接 我读到的几乎所有在线doc nodej