Como mover um cursor disponível com dados em espera até o final, para receber novas atualizações
Eu estou tentando assistir o oplog do MongoDB com o driver node.js e funciona em teoria, mas tem bastante tempo de aceleração, porque parece estar verificando a coleção inteira. Encontrei isso nos documentos do MongoDB:
Como os cursores disponíveis não usam índices, a verificação inicial da consulta pode ser cara; mas, depois de esgotar o cursor inicialmente, as recuperações subsequentes dos documentos adicionados recentemente são baratas.Existe uma maneira de esgotar rapidamente o cursor para começar a seguir? Parece-me que os caras do Meteor resolveram isso, mas tenho problemas para entender a diferença de ler o código deles. Isto é o que eu tenho atualmente:
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.");
});