mongoDB + nodeJS:不能保持stream游标打开

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

在这篇文章的基础上,我使用本地nodeJS驱动程序的stream游标来创buildstream,但是它只适用于创buildstream时集合中存在的内容。 没有进一步的更新被写入。

这是我的代码:

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只返回在调用时匹配的结果(如你所见)。

虽然在Node.JS中没有丰富的信息。 这是一个正确的方向指针。

虽然我没有testing这个代码,它应该是像下面的东西。 关键是使用capped集合并将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})); });