0

私が使用しているスクリプトはこちらです: https://gist.github.com/2759751

後でアクセスできるように、node.js アプリから mongodb コレクションにストリーミングされ、解析されたメッセージを保存するようにコードを変更したいと考えています。これまでのところ、私はチュートリアルコードで作業しており、db.open() を使用する場合、db.open() メカニズムを正しく取得することについて混乱しています。これはストリームであるため、複数回開くことができないと不平を言っています。削除すると、開いている接続が見つからないと表示されます。ストリームを保存できるように接続を 1 回開くにはどうすればよいですか?

私はmongoをインスタンス化します:

mongo = require('mongodb'),
    db = new mongo.Db('wikis', new mongo.Server('localhost', 27017, {}), {});

ストリームは次のようなオブジェクトを追い出します:

return {
    flag: flag,
    page: page,
    pageUrl: pageUrl,
    url: m[3],
    delta: delta,
    comment: m[6],
    wikipedia: wikipedia,
    wikipediaUrl: wikipediaUrl,
    wikipediaShort: config.wikipedias[msg[0]].short,
    wikipediaLong: config.wikipedias[msg[0]].long,
    user: user,
    userUrl: userUrl,
    unpatrolled: isUnpatrolled,
    anonymous: anonymous,
    robot: isRobot,
    namespace: namespace,
    minor: isMinor

}

そして、ストリームの一部を次のように保存したいと思います。

function saveRecs(msg){
//db.open(function(){

    db.collection('wikiCollection', function(err, collection){
        doc = {
            "page": msg.page,
            "url": msg.url,
            "user": msg.user
        };

        collection.insert(doc, function(){
            console.log('Got a record, boss!');
        }); 
    });
//});
}
4

1 に答える 1

1

db.open は次のようなコールバックを受け取ります

dbOpenCallback(err, db){
  // Check if err is set to anything other wise you are good
}
//...
db.open(dbOpenCallback);

接続が開いていることを確立したら、db 変数がスコープ内にある限り、saveRecs 関数を呼び出すことができます。

于 2012-05-20T23:00:40.700 に答える