连接至 MongoDB
在本指南中,您可以了解如何使用 Kotlin 驱动程序连接到 MongoDB 实例或副本集。
您可以查看示例代码以连接到 Atlas 集群,或继续阅读以了解有关 MongoClient
类和连接 URI 的更多信息。
MongoClient
您可以使用 MongoClient
类连接到 MongoDB 并与之通信。
使用 MongoClient.create()
方法构造 MongoClient
。
重要
客户端重用
由于每个 MongoClient
代表一个具有线程安全性的数据库连接池,因此大多数应用程序仅需要一个 MongoClient
实例,即使跨多个线程也是如此。
要详细学习;了解连接池在驾驶员中的工作原理,请参阅常见问题解答页面。
所有资源使用限制(例如最大连接数)均适用于单个 MongoClient
实例。
要了解用于控制 MongoClient
行为的不同设置,请参阅 MongoClient 设置指南。
提示
当不再需要实例时,始终调用 MongoClient.close()
清理资源。
连接 URI
连接 URI提供驱动程序用于连接到 MongoDB 部署的指令集。该指令集指示驱动程序应如何连接到 MongoDB,以及在连接时应如何运行。下图解释了示例连接 URI 的各个部分:
此图使用标准连接string格式mongodb
作为协议。 如果您希望部署更加灵活,并且能够轮流更改服务器而无需重新配置客户端,则还可以使用DNS 种子列表连接格式mongodb+srv
。
注意
如果您的部署是在MongoDB Atlas上,请参阅Atlas驱动程序连接指南,并从语言下拉列表中选择 Kotlin 以检索连接string 。
如果您使用基于密码的身份验证机制,则连接 URI 的下一部分将包含您的凭证。 将user
的值替换为数据库用户名,并将pass
的值替换为数据库用户的密码。 如果您的身份验证机制不需要凭证,请忽略连接 URI 的这一部分。
连接 URI 的下一部分指定主机名或 IP 地址,后跟 MongoDB 实例的端口。在示例中,sample.host
代表主机名,27017
是端口号。替换这些值以参考您的 MongoDB 实例。
连接 URI 的最后一部分包含作为参数的连接选项。 在此示例中,我们设置了两个连接选项: maxPoolSize=20
和w=majority
。 有关连接选项的更多信息,请跳至本指南的“连接选项”部分。
Atlas 连接示例
要连接到 Atlas 上的 MongoDB 部署,请创建一个客户端。通过将 MongoClientSettings
对象传递给 MongoClient.create()
构造函数,可以创建一个使用连接字符串和其他客户端选项的客户端。
要实例化 MongoClientSettings
对象,使用构建器方法指定您的连接字符串和任何其他客户端选项,然后调用 build()
方法。将 applyConnectionString()
方法链接到构建器以指定您的连接 URI。
您可以设置 stable API 版本客户端选项,以避免升级到新服务器版本时发生破坏性变更 (breaking change)。要了解有关 Stable API 功能的更多信息,请参阅Stable API 页面。
以下代码展示了在连接到 Atlas 上的 MongoDB 部署时,如何指定连接字符串和 Stable API 客户端选项,并检查连接是否成功:
// Replace the placeholder with your Atlas connection string val uri = "<connection string>" // Construct a ServerApi instance using the ServerApi.builder() method val serverApi = ServerApi.builder() .version(ServerApiVersion.V1) .build() val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString(uri)) .serverApi(serverApi) .build() // Create a new client and connect to the server val mongoClient = MongoClient.create(settings) val database = mongoClient.getDatabase("admin") try { // Send a ping to confirm a successful connection val command = Document("ping", BsonInt64(1)) val commandResult = database.runCommand(command) println("Pinged your deployment. You successfully connected to MongoDB!") } catch (me: MongoException) { System.err.println(me) }
连接 MongoDB 的其他方式
如果要连接到未托管在 Atlas 上的单个 MongoDB 服务器实例或副本集,请参阅以下部分了解如何连接。
连接到本地计算机上的 MongoDB Server
如果您需在本地机器上运行 MongoDB 服务器以用于开发目的而不是使用 Atlas 集群,则需完成以下操作:
下载 MongoDB Server Community 或 Enterprise 版本。
安装并配置 MongoDB Server。
启动该服务器。
重要
务必保护您的 MongoDB 服务器免受恶意攻击。请参阅我们的安全检查清单,获取安全建议清单。
在成功启动 MongoDB 服务器后,在驱动程序连接代码中指定连接字符串。
如果 MongoDB Server 在本地运行,您可以使用连接字符串 "mongodb://localhost:<port>"
,其中 <port>
是您配置服务器以侦听传入连接的端口号。
如果您需要指定不同的主机名或 IP 地址,请参阅 Server 手册中有关连接字符串的条目。
要测试是否能够连接到服务器,请替换连接到 MongoDB Atlas 示例代码中的连接字符串,并运行此代码。
连接到副本集
MongoDB 副本集部署是一组用于存储相同数据集的连接实例。这种实例配置提供了数据冗余和高数据可用性。
要连接到副本集部署,请指定副本集节点主机名(或 IP 地址)和端口号。
如果您无法提供副本集中主机的完整列表,则可以在该副本中指定单个主机或主机子集,并指示驱动程序通过以下方式执行自动发现:
将副本集名称指定为
replicaSet
参数的值将
false
指定为directConnection
参数的值在副本集中指定多个主机
提示
尽管您可以指定副本集中主机的子集,但要包含副本集中的所有主机,以确保驱动程序能够在其中一台主机无法访问时建立连接。
以下示例展示了如何使用 ConnectionString
或 MongoClientSettings
类为 MongoClient
实例指定多个主机。选择与您首选课程相对应的标签页。
val connectionString = ConnectionString("mongodb://host1:27017,host2:27017,host3:27017/") val mongoClient = MongoClient.create(connectionString)
val seed1 = ServerAddress("host1", 27017) val seed2 = ServerAddress("host2", 27017) val seed3 = ServerAddress("host3", 27017) val settings = MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts( listOf(seed1, seed2, seed3) ) } .build() val mongoClient = MongoClient.create(settings)