You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何连接MongoDB P-S-S副本集的两个从节点时可以执行写入操作?

问题结论

这是MongoDB的官方设计预期行为,不属于异常问题。

核心原因解释
  • 当MongoDB连接串指定了多个节点地址,且没有显式配置directConnection=true参数时,驱动默认会自动执行副本集成员发现逻辑:它会优先连接列表中任意一个可达的节点,拉取该节点存储的整个副本集的完整成员配置,自动识别出当前的主节点地址。后续所有写入请求会被驱动自动路由到主节点执行,所以哪怕你给出的地址全是从节点,只要能正常访问其中一个从节点,就可以正常完成写入操作。
  • 你单独连接单个从节点时,驱动默认会进入直连模式,不会触发副本集发现逻辑,写入请求会直接发送到当前连接的从节点,从节点本身不允许写入,因此抛出pymongo.errors.NotPrimaryError报错,完全符合预期。
验证方法

你可以在包含两个从节点的连接串末尾添加directConnection=true参数,修改为:
mongodb://test:test@node02:27017,node03:27017/test-db?directConnection=true
此时驱动会强制直连你指定的节点,不会做副本集发现和请求路由,写入时就会抛出和单独连从节点相同的非主节点报错。

内容的提问来源于stack exchange,提问作者goldenbull

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:54:03