对于日志查看器,我必须在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}));
});
我做错了什么?这可以吗?
答案 0 :(得分:3)
如果你有一个上限集合,你可以使用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}));
});