O motivo dos erros intermitentes é devido às preferências de leitura padrão do driver, principalmente em relação aos conjuntos de réplicas. A preferência de leitura padrão é primária. Para cada um dos modos mencionados abaixo, PRIMARY refere-se ao banco de dados mestre (sempre o mais atualizado) e SECUNDÁRIO refere-se ao(s) escravo(s), que são basicamente as cópias do mestre e nem sempre estão atualizados.
PRIMARY: The default read mode. Read from primary only. Throw an error if
primary is unavailable. Cannot be combined with tags.
A solução para alterar a preferência de leitura para um dos seguintes:
PRIMARY PREFERRED: Read from primary if available, otherwise a secondary.
SECONDARY PREFERRED: Read from a secondary if available, otherwise read from the primary.
NEAREST: Read from any member node from the set of nodes which respond the fastest.
Código de exemplo:
// Use this when doing a read if you don't care if the data is always consistent.
// Change the following with secondaryPreferred() if you have high writes, so
// that you don't interfere with them.
ReadPreference preference = ReadPreference.primaryPreferred();
DBCursor cur = new DBCursor(collection, query, null, preference);
Para obter mais informações, consulte a fonte .