连接到 MongoDB
在本指南中,您可以学习如何使用Kotlin驱动连接到MongoDB实例或副本集。
您可以通过以下示例代码连接到Atlas集群或继续阅读以了解更多关于MongoClient
类和连接URI的信息。
MongoClient
您可以使用MongoClient
类连接到并与MongoDB进行通信。
使用MongoClient.create()
方法构建一个MongoClient
。
重要
重用客户端
由于每个MongoClient
都代表一个线程安全的连接池,大多数应用程序只需要一个MongoClient
实例,即使在多个线程之间也是如此。
有关驱动程序中连接池的工作原理的更多信息,请参阅常见问题解答页面.
所有资源使用限制,如最大连接数,均适用于单个MongoClient
实例。
有关您可以使用来控制MongoClient
行为的各种设置的更多信息,请参阅MongoClient 设置指南。
提示
当实例不再需要时,始终调用MongoClient.close()
以清理资源。
连接URI
连接URI提供了一组指令,驱动程序使用这些指令连接到MongoDB部署。它指导驱动程序如何连接到MongoDB,以及连接时应该如何行为。以下图解解释了示例连接URI的每个部分。

本图使用的是标准连接字符串格式,使用mongodb
作为协议。如果您希望有更灵活的部署能力以及能够在不重新配置客户端的情况下更改服务器,也可以使用DNS种子列表连接格式,即mongodb+srv
。
注意
如果您的部署在MongoDB Atlas上,请参阅Atlas驱动连接指南并选择Kotlin从语言下拉菜单中检索您的连接字符串。
连接URI的下一部分包含您的凭据,如果您使用的是基于密码的认证机制。将user
的值替换为您数据库的用户名,将pass
替换为您的数据库用户的密码。如果您的认证机制不需要凭据,请省略连接URI的这一部分。
连接URI的下一部分指定了您的MongoDB实例的主机名或IP地址,以及端口。在示例中,sample.host
表示主机名,27017
是端口号。将这两个值替换为您自己的MongoDB实例。
连接URI的最后一部分包含作为参数的连接选项。在示例中,我们设置了两个连接选项:maxPoolSize=20
和w=majority
。有关连接选项的更多信息,请参阅本指南的连接选项部分。
Atlas连接示例
要连接到Atlas上的MongoDB部署,创建一个客户端。您可以通过将MongoClientSettings
对象传递给MongoClient.create()
方法来创建使用您的连接字符串和其他客户端选项的客户端。
要实例化一个MongoClientSettings
对象,使用构建器方法指定您的连接字符串和其他客户端选项,然后调用build()
方法。将applyConnectionString()
方法链接到构建器以指定您的连接URI。
您可以将稳定API版本客户端选项设置为避免在升级到新服务器版本时出现破坏性更改。有关稳定API功能的更多信息,请参阅稳定API页面。
以下代码演示了如何在连接到Atlas上的MongoDB部署时指定连接字符串和稳定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 服务器
如果您需要在本地上运行 MongoDB 服务器进行开发,而不是使用 Atlas 集群,则需要完成以下操作
重要
始终确保您的 MongoDB 服务器免受恶意攻击。请参阅我们的安全清单以获取安全建议列表。
在成功启动 MongoDB 服务器后,在驱动程序连接代码中指定您的连接字符串。
如果您的 MongoDB 服务器在本地运行,您可以使用连接字符串 "mongodb://localhost:<port>"
,其中 <port>
是您配置服务器监听传入连接的端口号。
如果您需要指定不同的主机名或 IP 地址,请参阅我们的服务器手册中的连接字符串部分。
为了测试您是否可以连接到您的服务器,请将连接字符串替换为连接到 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)