我正在尝试使用node.js驱动程序观看MongoDB oplog,它在理论上有效,但它有很长的时间,因为它似乎正在扫描整个集合。我在MongoDB文档中找到了这个:
- 因为tailable游标不使用索引,所以查询的初始扫描可能很昂贵;但是,在最初耗尽光标之后,后续检索新添加的文档的成本很低。
有没有办法快速排气"光标刚刚开始拖尾?在我看来,流星家伙已经解决了这个问题,但我很难理解阅读代码的不同之处。这就是我目前所拥有的:
var cursorOptions = {
tailable: true,
awaitdata: true,
numberOfRetries: -1
};
var oplogStream = oplogDb.collection('oplog.rs').find(
{
ns: { $regex : /^dbname\./ },
op: "i",
ts: { $gt: lastEntry.ts }
},
cursorOptions
).sort({$natural: -1}).stream();
oplogStream.on('data', publishDocument);
oplogStream.on('end', function() {
log.error("received unexpected end event from oplog watcher.");
});
答案 0 :(得分:4)
很好,在问我找到答案后5分钟。我将在此发布此信息以供将来参考:
您必须添加oplogReplay
标记并将其设置为true
。如果您还在ts
字段上执行范围查询,则仅适用。我没有设置范围之前尝试过此操作,但没有做任何事情。当您添加下面突出显示的这一行时,上面的代码可以使用:
var cursorOptions = {
tailable: true,
awaitdata: true,
oplogReplay: true, // add this line
numberOfRetries: -1
};