【问题标题】:Why isn't "connect" option in mongo connection string documented?为什么没有记录 mongo 连接字符串中的“连接”选项?
【发布时间】:2020-03-21 01:15:25
【问题描述】:

问题在于,即使我在连接字符串中只针对我的副本集的一个节点,mongo-go-driver 总是希望发现并连接其他节点。

我找到了一个解决方案here,基本上说我应该在连接字符串中添加connect 选项。

mongodb://host:27017/authDb?connect=direct

我的问题是:这种做法是好是坏,为什么 mongo 没有记录在案,这个选项还有其他可用值吗?

【问题讨论】:

    标签: mongodb go


    【解决方案1】:

    该选项仅适用于 Go 驱动程序。对于所有其他驱动程序,它无法识别,因此未将其记录为通用连接字符串选项。

    Go 驱动程序的文档在 https://godoc.org/go.mongodb.org/mongo-driver/mongo#example-Connect--Direct

    【讨论】:

    • mongo连接字符串中不也是directConnection=true吗?
    • 是的,由于这个答案最初是编写的,MongoDB 已经为大多数驱动程序添加了对directConnection 选项的支持。
    【解决方案2】:

    这种做法是好是坏,为什么 mongo 没有记录在案,这个选项还有其他可用的值吗?

    正如已接受的答案中所指出的,这已记录在驱动程序文档中。现在讨论问题的另一部分。

    一般来说,在副本集上下文中,您希望连接到拓扑而不是直接连接到特定的副本集成员,但出于管理目的除外。复制旨在提供冗余,并且在故障转移的情况下不建议直接连接到一个成员,即主节点。

    所有官方 MongoDB 驱动程序都遵循MongoDB Specifications。关于直接连接,要求当前server-discovery-and-monitoring.rst#general-requirements

    直接连接:客户端必须能够连接到单个 任何类型的服务器。这包括查询隐藏的副本集成员, 并连接到未初始化的成员(请参阅 RSGhost)以运行 “replSetInitiate”。不必设置读取首选项 连接到辅助。当然,二级会拒绝所有 使用 PRIMARY 读取首选项完成的操作,因为 slaveOk 位未设置,但初始连接本身成功。驱动程序 可以允许直接连接到仲裁器(例如,运行 行政命令)。

    它只指定它必须能够这样做,而不是如何。目前支持direct选项方法的不只是MongoDB Go驱动,还有.NET/C#和Ruby。

    目前有一个open PR 用于规范统一行为。未来,所有驱动程序都将采用相同的方式建立直连。

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 2010-09-21
      • 2012-10-10
      • 2011-11-10
      • 2020-12-18
      • 2011-01-02
      • 1970-01-01
      • 2014-11-23
      • 2012-01-19
      相关资源
      最近更新 更多