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 包中调用相关辅助方法。

要了解有关连接选项的更多信息,请参阅“连接选项”一节。要了解有关创建客户端的更多信息,请参阅 API 文档中的客户端Connect()

您可以将 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/v2/bson"
"go.mongodb.org/mongo-driver/v2/mongo"
"go.mongodb.org/mongo-driver/v2/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 字符串。

  • 当指定主机不是主节点时,写入会失败。

  • 当指定的主机不是节点时,要求您指定从节点读取偏好

后退

连接