使用oplog监视mongo更新事件

时间:2015-12-23 13:04:17

标签: mongodb mongoose

我必须收听mongodb文档中特定字段的更改并相应地向客户端发送数据

我一直在寻找解决方案,但我唯一能找到的就是查询oplog     mongodb的(操作日志)。

db.collection("oplog.rs", function(err, oplog) {})

问题

我们如何根据oplog(上限集合)做出决策,以及我们多久会查询oplog以查看更改?

我们是否有任何替代解决方案可能会使用mongoose这个问题?

1 个答案:

答案 0 :(得分:4)

MongoDB跟踪名为“oplogs”(操作日志)的集合中的所有数据库更改。当您需要跟踪数据库的 EACH和EVERY 集合时,将使用Oplog。但是,如果您需要跟踪一个集合,则可以使用以下代码在该特定集合上创建可用光标。 (注意:只有上限集合可以使用tailable游标)

但是,如果要使用oplog,则在多个MongoDB服务器实例的情况下,默认情况下启用oplog,但如果您正在处理单个实例MongoDB服务器,则需要在命令提示符中通过此命令在mongoDB中启用oplog:

mongod --replSet rs0

然后使用Mongoose从oplogs集合中获取记录,您可以尝试以下代码。

var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/local');  //local db has oplogs collection

mongoose.connection.on('open', function callback() {
    var collection = mongoose.connection.db.collection('oplog.rs'); //or any capped collection
    var stream = collection.find({}, {
        tailable: true,
        awaitdata: true,
        numberOfRetries: Number.MAX_VALUE
    }).stream(); 

stream.on('data', function(val) {
    console.log('Doc: %j',val);
});

stream.on('error', function(val) {
    console.log('Error: %j', val);
});

stream.on('end', function(){
    console.log('End of stream');
});
});

现在我想这可能有所帮助。上面的代码是您在Mongoose中实现tailable cursor的方式。