Overview
在本指南中,您可以学习;了解如何使用连接字符串和 MongoClient
对象通过Go驾驶员连接到不同类型的MongoDB部署。
提示
要了解如何创建和配置 MongoClient
对象,请参阅 创建Mongo客户端 页面。
连接到 Atlas
要连接到MongoDB 上的Atlas 部署,请在连接string 中包含以下元素:
Atlas 集群的 URL
MongoDB 用户名
MongoDB 密码
然后,将连接string传递给 MongoClient
构造函数。
当您连接到Atlas时,我们建议使用 Stable API客户端选项,以避免Atlas升级到新版本的MongoDB Server时发生重大更改。 要学习;了解有关 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/") } // Uses the SetServerAPIOptions() method to set the Stable API version to 1 serverAPI := options.ServerAPI(options.ServerAPIVersion1) // Defines the options for the MongoDB client opts := options.Client().ApplyURI(uri).SetServerAPIOptions(serverAPI) // Creates a new client and connects 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) } }() // Sends 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!") }
连接到本地部署
如果出于开发目的必须在本地计算机上运行 MongoDB Server,请完成以下步骤:
下载 MongoDB Server Community 或 Enterprise 版本。
安装并配置 MongoDB Server。
启动该服务器。
在成功启动 MongoDB 服务器后,在驱动程序连接代码中指定连接字符串。
如果 MongoDB Server 在本地运行,您可以使用连接字符串 "mongodb://localhost:<port>"
,其中 <port>
是您配置服务器以侦听传入连接的端口号。
有关如何指定不同主机名或IP解决的更多信息,请参阅服务器手册中的连接字符串。
要测试能否连接到服务器,请将上述代码示例中的连接字符串替换为本地主机连接字符串。
连接到副本集
MongoDB 副本集部署是一组用于存储相同数据集的连接实例。这种配置提供了数据冗余和高数据可用性。
要连接到副本集部署,请指定每个实例的主机名和端口号(以逗号分隔),并将副本集名称指定为连接字符串中 replicaSet
参数的值。 在以下示例连接字符串中,主机名为 host1
、host2
和 host3
,端口号均为 27017
。 副本集名称为 myRS
。
mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myRS
连接到副本集时,驱动程序默认执行以下操作:
在给定任一节点的地址时发现所有副本集节点。
将操作分派给相应节点,例如,对主节点进行写入的指令。
提示
您只能指定一台托管来连接到副本集。但是,您必须提供完整的主机列表,以确保指定托管不可用时的连接性。
要学习;了解有关副本集的更多信息,请参阅服务器手册中的复制条目。
DirectConnection
要强制在连接字符串中指定的托管上执行操作,请指定 directConnection
选项。 直接连接表现出以下行为:
不支持 SRV 字符串。
当指定主机不是主节点时,写入会失败。
当指定的托管不是主节点 (primary node in the replica set)节点时,它们要求您指定具有从节点(secondary node from replica set)从节点(secondary node from replica set)读取偏好(read preference)节点。
注意
Docker 中的副本集
当副本集在Docker中运行时,它可能只公开一个MongoDB端点。在这种情况下,无法发现副本集。在连接 URI 中指定 directConnection=false
或未设置此选项,可能会阻止应用程序与之连接。
在测试或开发环境中,您可以通过指定 directConnection=true
来连接到副本集。在生产环境中,我们建议配置集群,以便每个 MongoDB 实例都可以在 Docker 虚拟网络之外访问。
DNS 服务发现
要使用 DNS 服务发现来查找要连接的服务的 DNS SRV记录,请在连接字符串中指定 SRV 连接格式。 如果指定此格式, Go驾驶员将自动重新扫描新主机。您的部署可以将主机添加到其拓扑结构中,而无需更改客户端配置。
以下代码显示了使用 SRV 连接格式的连接字符串:
uri := "mongodb+srv://<hostname>/"
要学习;了解有关 SRV 连接格式的更多信息,请参阅MongoDB Server手册中的 SRV 连接格式 条目。
API 文档
要学习;了解有关使用 MongoClient
连接到不同MongoDB实例的更多信息,请参阅以下API文档: