1

ログビューアの場合、sockJSソケットのmongoDBコレクションに更新を書き込む必要があります。

この投稿に基づいて、ネイティブnodeJSドライバーのストリームカーソルを使用していますが、ストリームを作成するときにコレクションに存在するコンテンツに対してのみ機能します。それ以上の更新は書き込まれません。

これが私のコードです:

var server = new mongodb.Server(config.db_host, config.db_port, {});
var DB = new mongodb.Db('myLogs', server, {w:0}).open(function (error, database) {
    if (error) throw error;
    db.logs = database.collection('logs');
});

var stream = db.logs.find({user: sID}, {sort: [['_id', 'asc']]}).stream();

stream.on('error', function (err) {
    socket.write(JSON.stringify({'action': 'log','param': 'log db streaming error'}));
});
stream.on('data', function (doc) {
    socket.write(JSON.stringify({'action': 'log','param': doc.log}));
});

私は何が間違っているのですか?これは機能しますか?

4

1 に答える 1

3

上限のあるコレクションがある場合は、TailableCursorを使用できます。これは必要な処理を実行します。標準のCursorStreamは、への呼び出し時に一致した結果のみを返しますfind(これまで見てきたように)。

ただし、Node.JSでこれを行うための豊富な情報はありません。これが正しい方向へのポインタです。

このコードはテストしていませんが、次のようになります。重要なのは、上限付きコレクションを使用し、tailableandawaitdataオプションをに設定することtrueです。

var stream = db.logs.find({user: sID}, {
    tailable: true,
    awaitdata: true 
    /* other options */
}).stream();

stream.on('data', function (doc) {
    socket.write(JSON.stringify({'action': 'log','param': doc.log}));
});
于 2013-03-06T22:00:58.080 に答える