0

その接続を操作してコレクションを照会する方法がわかりません。時々接続がすでにそこにあり、問題がないからです。ただし、接続を確立する必要がある場合、コレクションクエリはキューに入れられません。常に1つしか接続できないため、常に新しい接続を確立することはできません。接続コールバックでコレクションクエリが必要なようですが、接続がすでに存在する場合はスタンドアロンでも必要です。

もちろん、これは元に戻せませんが、すべての何とかとヤッダの頭上で、私はそれを正しくやっていないと思います。結局のところ、これは私にはちょっと構文的なサッカリンのようです。 シンタックスシュガーはどこにありますか?

これが基本的な例です。同じ秒でたくさんのリクエストを想像してみてください。

var util        = require('util'),
    mongo       = require('mongodb'),
    Server      = mongo.Server,
    Db          = mongo.Db,
    mServer     = new Server('localhost', 27017),
    mDb         = new Db('SomeDatabase', mServer),
    db;

if (mDb._state == 'disconnected') {
    util.debug('MONGODB: connecting...');
    mDb.open(function(err, newDb) {
        if (!err) {
            db = newDb;
            // I cannot immediately work on a collection here, 
            // because it takes a moment for the db to connect.
        }
    });
}
else if (mDb._state == 'connecting') {
    // I need to catch this state because I cannot work on collections yet, 
    // but I cannot connect either because it's already connecting.
}
// else if (mDb._state == 'connected') {

// Queries need to be performed after connection is established 
// or when connection was already established by a previous request.
db.createCollection(collection, function(err, collection) {
    if (!err) {
        collection.insert(record, {safe:true}, function(err, result) {
            util.debug('MONGODB: Inserted.');
        });
    }
});

// }

さて、私が見つけた初心者向けガイドはすべてのコールバックに関するmDb.openものですが、これはノードがすでに実行されているときに連続するリクエストで問題を引き起こします。別の接続を開くことを拒否します。では、単一の起動コールバックでは不十分な場合に、nodejsでmongodbをうまく操作するための実際の正しい方法は何ですか?

コールバック形式でクエリを渡すモジュールを想像します。このモジュールは、(1)接続コールバックを待機する場所、(2)コレクションに直接、または(3)待機するコールバックを渡します。接続しますが、接続コールバックには遅すぎます。しかし、私が言ったように、これは純粋な統語的サッカリンです。

4

1 に答える 1

1

あなたは何かを誤解しています。まず、DBへの接続を作成します。

var mDb = new Db('SomeDatabase', mServer);

そして、あなたはこの接続への参照を保持します。DBとの間で何かをロード/保存する場合は常に、同じ変数を使用します。リクエストごとに再作成するわけではありません。初期化は、Webサーバー自体を作成する前でも実行する必要があります(openコールバック時にサーバーを作成します)。擬似コードは次のとおりです。

var webserver = INITIALIZE_NEW_SERVER( );
var mDB = new Db('SomeDatabase', mServer);

// set request handler
WHEN_REQUEST ---> {
    mDB.createCollection( ... );
    // whatever
}

mDb.open(function(error, newDb) {
    // handle errors
    webserver.listen( );
});
于 2012-09-13T12:40:09.170 に答える