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