Pymongo:如何确保仅从副本集中所需的主机(尤其是 SECONDARY)进行连接和读取

Pymongo : how to ensure connection and reading from only desired host (especially SECONDARY) in a replica set

背景

mongoDB 生产集群(未分片)3 台主机。它们属于副本集 rs0

我正在尝试使用 pymongopython 编写脚本。这是一个生产集群,我希望脚本只从 H3 辅助副本集 读取,以免给主副本增加负担并使其免费使用定期活动。数据将从 批次的 2000 份文档 中的名为 "devices" 的集合中提取。这应该会进一步减少读取操作的开销。

相关代码

client = MongoClient('mongodb://H3-hostname:27017/', replicaset='rs0', readPreference='secondary')
.
.
.
.
.
devices = devices_collection.find({"status" : "ACTIVE"},{"key" : 1, "username" : 1}, sort = [("key", pymongo.ASCENDING)]).batch_size(2000)

还尝试通过如下提及集群中的所有主机,以稍微不同的方式创建客户端

client = MongoClient('mongodb://H1-Hostname:27017, H2-Hostname:27017, H3-hostname:27017/?replicaset=rs0', readPreference='secondary')

问题

根据我的理解,上面的客户端将从辅助副本集中读取 ONLY。但是当我 运行 脚本并查看云管理器时,主要的 H1 显示页面错误从 ~15-20 急剧增加到 ~600。

环境

我也把这个问题发到mongo-用户组,那里有人回答了。

首先是pymongo的版本不对。它是 2.8,至少 python27 使用的是

$ python27
>>> import pymongo
>>> pymongo.version
    '2.8'

$ python
>>> import pymongo
>>> pymongo.version
    '3.0.3'

合适的语法是

MongoClient('mongodb://H3-Hostname:27017/?readPreference=secondary')