2014-10-27 50 views
3

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

回答

3

好,5分鐘後問我找到答案。我會在這裏發佈此以供將來參考:

您必須添加oplogReplay標誌並將其設置爲true。此只適用於,如果您還在ts字段上執行範圍查詢。我之前嘗試過,沒有設置範圍,它什麼也沒做。以上代碼在添加下面突出顯示的這一行時起作用:

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