0

MongoDB から読み取り、コンテンツを Web ページに出力しようとしています。Mongoから読み取るためにmongodbモジュールを使用しています。

データを正常に読み取って Web ページに出力することはできますが、データベースを閉じるタイミングと http 接続をいつ終了するタイミングがわかりません。したがって、私の Web ページは結果を出力しますが、サーバーが何かを送信するのを待ち続けます。

次の質問を参照しましたが、この特定のシナリオで何をする必要があるか理解できません。

これが私のコードです:

/* Opens the secondary collection and goes through each entry*/
var getClientIDs = function(collect, res) {
  db.collection(collect, function(err, collection) {

      var cursor = collection.find();

      cursor.each(function(err, item) {
            if(item != null) {          
            console.log(item['_id'] +"\t" + item['name']);
            res.write(item['_id'].toString());
            res.write("  ");
            res.write(item['name'].toString());
            res.write("</br>");
            }
            /*else {
                res.end("The End"); 
                db.close();     
            } Closes connection before other stuff is done. */
      });
    });

}
/* Opens the main collection and goes through each entry*/
var openCollection = function(collect, res) {
    console.log(green);
    // Establish connection to db
    db.open(function(err, db) {

      // Open a collection
      db.collection(collect, function(err, collection) {

          // Create a cursor
          var cursor = collection.find();

          // Execute the each command, triggers for each document
          cursor.each(function(err, item) {
                if(item != null) {
                getClientIDs(item['_id'], res);
                }
                /* else {
                    db.close();
              }   This closes the connection before other stuff is done */
          });
        });
      });
}
/* Start Here */ 
var http = require('http');
var port = 8888;
http.createServer(function (req, res) {
    res.writeHead(200,{"Content-Type": "text/html; charset=utf-8"});
    openCollection('company',res);
}).listen(port);

データベースには「会社」と呼ばれるコレクションがあり、そこにはたくさんのIDがあります。id の名前を持つ他のコレクションがあります:

company   = {{ _id: 'A001' }
             { _id: 'A002' }
             { _id: 'A003' }
            }      
A001 = {{_id: "A001-01", "name":"foo"}  
        {_id: "A001-02", "name":"bar"}}

A002 = {{_id: "A002-01", "name":"foo2"}  
        {_id: "A002-02", "name":"bar2"}}

私はこの方法でコレクションを作成しませんでした。これは私が作業し、Web ページに ID と名前を印刷するだけのスクリプトを作成する必要があったものです。

私のコードでは、ウェブページは次のように出力されます。

A001-01    foo
A001-02    bar
A002-01    foo2
A002-02    bar2

ありがとうございました。

4

1 に答える 1

1

ネイティブドライバーでMongoDB接続を開くと、実際には5つの接続のプールが開かれます(デフォルト)。そのため、アプリの起動時にそのプールを開き、リクエストごとにプールを開いたり閉じたりするのではなく、開いたままにしておくことをお勧めします。

HTTP応答を閉じることで、正しい方向に進んでいます。res.end();応答が完了したとき(つまり、がitemコールバックにあるとき)に呼び出すだけです。nullcursor.each

于 2012-11-16T21:12:43.053 に答える