【问题标题】:MongoDB connection not always closing after connection.close()MongoDB 连接并不总是在 connection.close() 之后关闭
【发布时间】:2016-11-21 06:29: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)

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

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    如果要关闭连接,连接成功后是否考虑使用.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

    【讨论】:

    • 嘿,我认为你不明白这个问题。我不想立即关闭我的连接,因为我正在进行所有数据库迁移。如果您希望程序正确退出,则应该关闭数据库连接,否则它将保持打开状态。你指的是如果你想再次使用它,你不应该关闭连接,例如在查询之间。
    • 哦,我明白了,也许你应该试试github.com/mongodb/node-mongodb-native。使用命令 db.close 。我从这里的答案中找到了它stackoverflow.com/a/12368764/3465227
    猜你喜欢
    • 2020-07-09
    • 2019-02-01
    • 2022-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多