我必须监听 mongodb 文档中特定字段的变化并将数据相应地发送给客户端
我尝试寻找解决方案,但我唯一能找到的就是查询mongodb的oplogs(操作日志)。
db.collection("oplog.rs", function(err, oplog) {})
Run Code Online (Sandbox Code Playgroud)
问题:
我们实际上将如何根据 oplog(上限集合)做出决策,以及我们将多久查询一次 oplog 以查看更改?
我们是否有使用 mongoose 来解决这个问题的其他解决方案?
MongoDB 在一个名为“oplogs”(操作日志)的集合中跟踪所有数据库更改。当您需要跟踪数据库的每个集合时,可以使用 Oplog。但是,如果您只需要跟踪一个集合,则可以使用以下代码在该特定集合上创建可跟踪游标。(注意:只有上限集合才能有可尾游标)
但是,如果您想使用 oplog,在多个 MongoDB 服务器实例的情况下,默认情况下会启用 oplog,但如果您在单实例 MongoDB 服务器上工作,则需要在命令提示符中通过以下命令在 mongoDB 中启用 oplog:
mongod --replSet rs0
Run Code Online (Sandbox Code Playgroud)
然后要使用 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');
});
});
Run Code Online (Sandbox Code Playgroud)
现在我想这可能会有所帮助。上面的代码是如何在 Mongoose 中实现可尾游标的。
| 归档时间: |
|
| 查看次数: |
2107 次 |
| 最近记录: |