Las preferencias de lectura son las siguientes:
- PRIMARIO :las consultas se envían al principal del conjunto de réplicas.
- PRIMARY_PREFERRED :las consultas se envían al principal si está disponible; de lo contrario, al secundario.
- SECUNDARIO :Las consultas se distribuyen entre los secundarios. Se genera un error si no hay secundarios disponibles.
- SECUNDARIO_PREFERIDO :Las consultas se distribuyen entre los secundarios, o el principal si no hay ningún secundario disponible.
- EL MÁS CERCANO :Las consultas se distribuyen entre todos los miembros.
Entonces no uno específico para el más cercano secundario. Puede lograr esto combinando NEAREST y tag_sets y etiquetar los secundarios.
Luego, si los secundarios han sido etiquetados {'secondaries': 1}
puedes leer desde el secundario más cercano así:
from pymongo import ReplicaSetConnection
from pymongo import ReadPreference
db = ReplicaSetConnection('localhost:27017', replicaSet='rs1')['my_db']
db.read_preference = ReadPreference.NEAREST
db.tag_sets = [{'secondaries': 1}]
Actualizar:
Debe tener en cuenta que si se produce una elección y la topología de su conjunto de réplicas cambia, tendrá que cambiar manualmente los conjuntos de etiquetas para representar los nuevos secundarios.