【问题标题】:How do I move a tailable cursor with awaitdata to the end so I just get new updates如何将带有 awaitdata 的可尾光标移动到末尾,以便获得新的更新
【发布时间】:2014-12-22 22:12:52
【问题描述】:

我正在尝试使用 node.js 驱动程序查看 MongoDB oplog,它在理论上可以工作,但它有相当长的时间,因为它似乎正在扫描整个集合。我在 MongoDB 文档中找到了这个:

  • 因为可尾游标不使用索引,查询的初始扫描可能很昂贵;但是,在最初用尽光标后,后续检索新添加的文档的成本很低。

有没有办法快速“耗尽”光标以开始拖尾?在我看来,Meteor 的人已经解决了这个问题,但我很难理解与阅读他们的代码的区别。这是我目前拥有的:

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

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

    您必须添加oplogReplay 标志并将其设置为true。这只有在您还对ts 字段进行范围查询时才有效。我之前尝试过这个,没有设置范围,它什么也没做。当您添加下面突出显示的这一行时,上面的代码有效:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      相关资源
      最近更新 更多