Docs 菜单
Docs 主页
/ / /
Go 驱动程序
/ /

连接指南

在此页面上

  • Overview
  • 连接 URI
  • 连接 MongoDB 的其他方式

在本指南中,可以了解如何使用 Go Driver 连接到 MongoDB 实例或副本集部署。

您可以使用 Go Driver 连接到以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

  • MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本

  • MongoDB Community:source-available、免费使用且可自行管理的 MongoDB 版本

连接 URI(也称为连接字符串)可告知驱动程序如何连接到 MongoDB,以及连接后如何进行操作。

以下的例子解释了示例连接 URI 的各个组成部分:

连接字符串的每个部分

在此示例中,我们使用 mongodb 作为协议,它指定了标准连接字符串格式。如果想要获得更高的部署灵活性,并且能够在不重新配置客户端的情况下更改轮换的服务器,也可以使用 DNS 种子列表连接格式

连接字符串的下一部分包含您的数据库用户名,如果使用基于密码的身份验证,则还包含您的密码。将 user 的值替换为您的数据库用户名,将 pass 替换为您的密码。如果您使用的是不需要用户名和密码的身份验证机制,请省略连接 URI 中的这一部分。

连接字符串的下一部分用来指定您 MongoDB 实例的主机名或 IP 地址和端口。在前面的例子中,我们使用 sample.host 作为主机名,27017 作为端口。请将这些值替换为指向您 MongoDB 实例的值。

连接字符串的最后一部分指定连接和身份验证选项。在示例中,我们设立了两个连接选项:maxPoolSize=20w=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,请参阅“无服务器实例限制”页面,以确定所需的最低驱动程序版本。

如果要连接到未托管在 Atlas 上的单个 MongoDB 服务器实例或副本集,请参阅以下部分了解如何连接。

如果出于开发目的必须在本地计算机上运行 MongoDB Server,请完成以下步骤:

  1. 下载 MongoDB Server CommunityEnterprise 版本。

  2. 安装并配置 MongoDB Server。

  3. 启动该服务器。

重要

务必保护您的 MongoDB 服务器免受恶意攻击。请参阅我们的安全检查清单,获取安全建议清单。

在成功启动 MongoDB 服务器后,在驱动程序连接代码中指定连接字符串。

如果 MongoDB Server 在本地运行,您可以使用连接字符串 "mongodb://localhost:<port>",其中 <port> 是您配置服务器以侦听传入连接的端口号。

如果想要指定其他主机名或 IP 地址,请参阅服务器手册中关于连接字符串的条目。

要测试能否连接到服务器,请在前面的代码示例中将连接字符串替换为 localhost 连接字符串。

MongoDB 副本集部署是一组用于存储相同数据集的连接实例。这种配置提供了数据冗余和高数据可用性。

要连接到副本集部署,请指定每个实例的主机名和端口号(以逗号分隔),并将副本集名称指定为连接字符串中 replicaSet 参数的值。在以下示例中,主机名为 host1host2host3,端口号均为 27017 。副本集名称为 myRS

mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myRS

连接到副本集时,驱动程序默认执行以下操作:

  • 在给定任一节点的地址时发现所有副本集节点。

  • 将操作分派给相应节点,例如,对主节点进行写入的指令。

提示

您只能指定一台主机来连接到副本集。但是,为了确保指定主机不可用时的连通性,您应该提供完整的主机列表。

要强制在连接 URI 中指定的托管上执行操作,请指定 directConnection 选项。直接连接表现出以下行为:

  • 不支持 SRV 字符串。

  • 当指定托管不是主节点 (primary node in the replica set)时,写入会失败。

  • 当指定的托管不是主节点 (primary node in the replica set)节点时,它们要求您指定从节点(secondary node from replica set)的读取偏好(read preference)。

后退

连接