Mongodb 如何将带有等待数据的可裁剪光标移动到末尾,以便获得新的更新

Mongodb 如何将带有等待数据的可裁剪光标移动到末尾,以便获得新的更新,mongodb,Mongodb,我试图用node.js驱动程序观看MongoDB oplog,它在理论上是可行的,但它有相当长的启动时间,因为它似乎在扫描整个集合。我在MongoDB文档中发现: 因为可定制游标不使用索引,所以查询的初始扫描可能会很昂贵;但是,在最初耗尽游标之后,随后检索新添加的文档的成本很低 有没有一种方法可以快速“耗尽”光标以开始跟踪?在我看来,流星人已经解决了这个问题,但我很难理解阅读他们的代码的区别。这就是我目前拥有的: var cursorOptions = { tailable: tru

我试图用node.js驱动程序观看MongoDB oplog,它在理论上是可行的,但它有相当长的启动时间,因为它似乎在扫描整个集合。我在MongoDB文档中发现:

  • 因为可定制游标不使用索引,所以查询的初始扫描可能会很昂贵;但是,在最初耗尽游标之后,随后检索新添加的文档的成本很低
有没有一种方法可以快速“耗尽”光标以开始跟踪?在我看来,流星人已经解决了这个问题,但我很难理解阅读他们的代码的区别。这就是我目前拥有的:

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.");
});

很好,问了5分钟后我找到了答案。我将在此处发布此内容,以备将来参考:

您必须添加
oplogReplay
标志并将其设置为
true
。只有在
ts
字段上进行范围查询时,此才有效。我以前在没有设置范围的情况下尝试过这个,但它没有任何效果。当您添加下面突出显示的这一行时,上述代码起作用:

var cursorOptions = {
  tailable: true,
  awaitdata: true,
  oplogReplay: true, // add this line
  numberOfRetries: -1
};