对于日志查看器,我必须将更新写入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是正确方向的指针。
尽管我尚未测试此代码,但它应该类似于以下内容。关键是使用加盖的集合并将tailable
和awaitdata
选项设置为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}));
});