对于日志查看器,我必须将更新写入sockJS套接字的mongoDB集合中。

基于this post,我使用的是本机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}));
});


我究竟做错了什么?能行吗?

最佳答案

如果您有封顶的收藏夹,则可以使用TailableCursor来完成您想要的操作。标准的CursorStream仅返回调用find时匹配的结果(如您所见)。

尽管在Node.JS中没有足够的信息来执行此操作。 Here是正确方向的指针。

尽管我尚未测试此代码,但它应该类似于以下内容。关键是使用加盖的集合并将tailableawaitdata选项设置为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}));
});

09-18 20:11