2016-07-18 27 views
2

私はmongodbデータベースの移行を行っているnodejsアプリケーションを持っています。MongoDB接続がconnection.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'); 
}); 

で終わるかなり多くが起こっている、作成した新しいコレクションは、文書等を再配置が、決して新しい接続が開かれました。アプリの出力は次のとおりです。データベース・ログは

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) 

[挿入と、ここでアップデートの多く]がある

Close 
Closed 

Opened connection to localhost testDatabase 

[ここで他のログの多く]

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) 

ご覧のとおり、1つのmongodb dbConnection.close()が呼び出されてnodejsアプリケーションが終了するのを防ぎましたが、接続は開いたままです。私はかなり長い間これを見ていますが、何がこの現象を引き起こす可能性があるのか​​理解していませんか?

答えて

0

接続を閉じるには、接続に成功した後に.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

+0

ねえ、私はあなたが問題を理解していないと思います。間にすべてのデータベース移行を行っているので、すぐに接続を閉じる必要はありません。また、プログラムを正常に終了させるには、データベース接続を閉じる必要があります。あなたが参照しているのは、接続をもう一度使用したい場合、接続を閉じるべきではないということです。クエリの間に – Philiiiiiipp

+0

ああ、おそらくあなたはhttps://github.com/mongodb/node-mongodb-nativeを試してみるべきです。 db.closeコマンドを使用します。私はここの答えからそれを見つけましたhttp://stackoverflow.com/a/12368764/3465227 –

関連する問題