As preferências de leitura são as seguintes:
- PRIMÁRIO :as consultas são enviadas para o primário do conjunto de réplicas.
- PRIMARY_PREFERRED :as consultas são enviadas para o primário, se disponível, caso contrário, um secundário.
- SECUNDÁRIO :as consultas são distribuídas entre os secundários. Um erro é gerado se não houver secundários disponíveis.
- SECONDARY_PREFERRED :as consultas são distribuídas entre os secundários ou o primário se nenhum secundário estiver disponível.
- MAIS PRÓXIMO :as consultas são distribuídas entre todos os membros.
Então não há não específico para o mais próximo secundário. Você pode conseguir isso combinando NEAREST e tag_sets e marcando os secundários.
Então, se os secundários tiverem sido marcados como
{'secondaries': 1}
você pode ler do secundário mais próximo assim: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}]
Atualização:
Você deve observar que, se ocorrer uma eleição e a topologia do seu replicaset for alterada, será necessário alterar manualmente o tag_sets para representar os novos secundários.