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 回答