De reden voor de intermitterende fouten is vanwege de standaard leesvoorkeuren voor het stuurprogramma, voornamelijk met betrekking tot replicasets. De standaard leesvoorkeur is primair. Voor elk van de onderstaande modi verwijst PRIMARY naar de masterdatabase (altijd de meest up-to-date) en SECONDARY verwijst naar slave(s), die in feite de kopieën van master zijn en niet altijd up-to-date zijn.
PRIMARY: The default read mode. Read from primary only. Throw an error if
primary is unavailable. Cannot be combined with tags.
De oplossing om de leesvoorkeur te wijzigen in een van de volgende:
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.
Voorbeeldcode:
// 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);
Zie voor meer informatie de bron .