У меня есть приложение nodejs, которое выполняет миграцию базы данных mongodb.MongoDB соединение не всегда закрывается после подключения.close()
Все это начинается с
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 выйти. Я смотрю на это уже довольно давно, но не понимаю, что может вызвать такое поведение?
Эй, я думаю, вы не понимаете проблему. Я не хочу сразу закрыть свою связь, так как я делаю все миграции базы данных между ними. И вы должны закрыть соединение с базой данных, если вы хотите, чтобы ваша программа вышла из строя, поскольку в противном случае она останется открытой. Вы имеете в виду, что вам не следует закрывать соединение, если вы хотите использовать его снова, например. между запросами. – Philiiiiiipp
О, я вижу, возможно, вам стоит попробовать https://github.com/mongodb/node-mongodb-native. используйте команду db.close. Я нашел это из ответа здесь http://stackoverflow.com/a/12368764/3465227 –