连接指南
Overview
在本指南中,可以了解如何使用 Go Driver 连接到 MongoDB 实例或副本集部署。
您可以使用 Go Driver 连接到以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:source-available、免费使用且可自行管理的 MongoDB 版本
连接 URI
连接 URI(也称为连接字符串)可告知驱动程序如何连接到 MongoDB,以及连接后如何进行操作。
一个连接 URI 的组成部分
以下的例子解释了示例连接 URI 的各个组成部分:
在此示例中,我们使用 mongodb
作为协议,它指定了标准连接字符串格式。如果想要获得更高的部署灵活性,并且能够在不重新配置客户端的情况下更改轮换的服务器,也可以使用 DNS 种子列表连接格式。
连接字符串的下一部分包含您的数据库用户名,如果使用基于密码的身份验证,则还包含您的密码。将 user
的值替换为您的数据库用户名,将 pass
替换为您的密码。如果您使用的是不需要用户名和密码的身份验证机制,请省略连接 URI 中的这一部分。
连接字符串的下一部分用来指定您 MongoDB 实例的主机名或 IP 地址和端口。在前面的例子中,我们使用 sample.host
作为主机名,27017
作为端口。请将这些值替换为指向您 MongoDB 实例的值。
连接字符串的最后一部分指定连接和身份验证选项。在示例中,我们设立了两个连接选项:maxPoolSize=20
和w=majority
。要学习;了解有关连接选项的更多信息,请参阅 连接选项指南。
连接示例
要连接到 MongoDB,必须创建一个客户端。客户端可管理您的连接并运行数据库命令。
提示
客户端重用
我们建议您在会话和操作中重复使用客户端。您可以使用同一Client
实例来执行多个任务,而不是每次都创建一个新的。Client
类型可以安全地被多个 goroutine 并发使用。要详细学习;了解连接池在驾驶员中的工作原理,请参阅常见常见问题解答页面。
您可以通过将 ClientOptions
对象传递给 Connect()
方法,创建使用连接字符串和其他客户端选项的客户端。
要指定您的连接 URI,请将其传递给 ApplyURI()
方法,该方法会返回一个新的 ClientOptions
实例。要设置任何其他选项,请从 options
包中调用相关辅助方法。
要学习;了解有关连接选项的更多信息,请参阅“连接选项”部分。要学习;了解有关创建客户端的更多信息,请参阅 Client 和 Connect() 的API文档。
您可以将 Stable API 版本作为一个选项设置,以避免升级到新的服务器版本时出现破坏性变更 (breaking change)。要了解有关 Stable API 功能的更多信息,请参阅 Stable API 页面。
以下代码展示了如何创建使用 Atlas 连接字符串和 Stable API 版本的客户端、如何连接到 MongoDB 以及如何验证连接是否成功:
// Connects to MongoDB and sets a Stable API version package main import ( "context" "fmt" "log" "os" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func main() { var uri string if uri = os.Getenv("MONGODB_URI"); uri == "" { log.Fatal("You must set your 'MONGODB_URI' environment variable. See\n\t https://mongodb.com/zh-cn/docs/drivers/go/current/usage-examples/") } // Use the SetServerAPIOptions() method to set the Stable API version to 1 serverAPI := options.ServerAPI(options.ServerAPIVersion1) opts := options.Client().ApplyURI(uri).SetServerAPIOptions(serverAPI) // Create a new client and connect to the server client, err := mongo.Connect(opts) if err != nil { panic(err) } defer func() { if err = client.Disconnect(context.TODO()); err != nil { panic(err) } }() // Send a ping to confirm a successful connection var result bson.M if err := client.Database("admin").RunCommand(context.TODO(), bson.D{{"ping", 1}}).Decode(&result); err != nil { panic(err) } fmt.Println("Pinged your deployment. You successfully connected to MongoDB!") }
提示
按照快速入门指南检索您的 Atlas 连接字符串。
注意
要了解如何连接到 Atlas Serverless,请参阅“无服务器实例限制”页面,以确定所需的最低驱动程序版本。
连接 MongoDB 的其他方式
如果要连接到未托管在 Atlas 上的单个 MongoDB 服务器实例或副本集,请参阅以下部分了解如何连接。
连接到本地计算机上的 MongoDB Server
如果出于开发目的必须在本地计算机上运行 MongoDB Server,请完成以下步骤:
下载 MongoDB Server Community 或 Enterprise 版本。
安装并配置 MongoDB Server。
启动该服务器。
重要
务必保护您的 MongoDB 服务器免受恶意攻击。请参阅我们的安全检查清单,获取安全建议清单。
在成功启动 MongoDB 服务器后,在驱动程序连接代码中指定连接字符串。
如果 MongoDB Server 在本地运行,您可以使用连接字符串 "mongodb://localhost:<port>"
,其中 <port>
是您配置服务器以侦听传入连接的端口号。
如果想要指定其他主机名或 IP 地址,请参阅服务器手册中关于连接字符串的条目。
要测试能否连接到服务器,请在前面的代码示例中将连接字符串替换为 localhost 连接字符串。
连接到副本集
MongoDB 副本集部署是一组用于存储相同数据集的连接实例。这种配置提供了数据冗余和高数据可用性。
要连接到副本集部署,请指定每个实例的主机名和端口号(以逗号分隔),并将副本集名称指定为连接字符串中 replicaSet
参数的值。在以下示例中,主机名为 host1
、host2
和 host3
,端口号均为 27017
。副本集名称为 myRS
。
mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myRS
连接到副本集时,驱动程序默认执行以下操作:
在给定任一节点的地址时发现所有副本集节点。
将操作分派给相应节点,例如,对主节点进行写入的指令。
提示
您只能指定一台主机来连接到副本集。但是,为了确保指定主机不可用时的连通性,您应该提供完整的主机列表。
DirectConnection
要强制在连接 URI 中指定的托管上执行操作,请指定 directConnection
选项。直接连接表现出以下行为:
不支持 SRV 字符串。
当指定托管不是主节点 (primary node in the replica set)时,写入会失败。
当指定的托管不是主节点 (primary node in the replica set)节点时,它们要求您指定从节点(secondary node from replica set)的读取偏好(read preference)。