连接到 MongoDB
在本指南中,您可以学习如何使用 Java 驱动程序连接到MongoDB Atlas 部署、MongoDB 实例或副本集。
您可以通过查看示例代码来连接到 Atlas 集群或继续阅读以了解有关MongoClient
类和连接 URI 的更多信息。
客户端
您可以使用 客户端
类连接到 MongoDB 并与之通信。
使用 MongoClients.create()
方法来构造一个 客户端
。
所有资源使用限制,例如最大连接数,都适用于单个 客户端
实例。
有关您可以用来控制 客户端
行为的不同设置的更多信息,请参阅有关 客户端设置 的指南。
提示
当实例不再需要时,始终调用 客户端.close()
以清理资源。
连接 URI
连接 URI 为驱动程序连接到 MongoDB 部署提供了一套指令。它指导驱动程序如何连接到 MongoDB 以及在连接期间应该如何表现。以下图示解释了示例连接 URI 的各个部分

在此示例中,您连接到具有 DNS SRV 记录的 Atlas MongoDB 部署。有关更多详细信息,请参阅 DNS Seed List Connection Format 文档。此格式在部署中提供灵活性,并能够在不重新配置客户端的情况下更改旋转中的服务器。
注意
如果您的部署在 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。
您可以设置稳定的API版本客户端选项,以避免在升级到MongoDB服务器的新版本时发生破坏性更改。有关稳定API功能的更多信息,请参阅稳定API页面。
以下代码演示了如何指定连接字符串和稳定API客户端选项来连接到Atlas上的MongoDB部署,并验证连接是否成功
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部署以进行开发,而不是使用Atlas集群,则需要完成以下步骤
重要
始终确保您的MongoDB部署免受恶意攻击。请参阅我们的安全清单以获取安全建议列表。
在成功启动您的MongoDB部署后,在驱动程序连接代码中指定您的连接字符串。
如果您的MongoDB部署在本地运行,您可以使用连接字符串 "mongodb://localhost:<port>"
,其中 <port>
是您配置服务器监听传入连接的端口号。
如果您需要指定不同的主机名或IP地址,请参阅我们服务器手册中的连接字符串条目。
为了测试您是否可以连接到您的部署,替换连接到MongoDB Atlas代码示例中的连接字符串并运行它。
连接到副本集
MongoDB副本集部署是一组连接的实例,它们存储相同的数据集。这种实例配置提供了数据冗余和高数据可用性。
要连接到副本集部署,请指定副本集成员的主机名(或IP地址)和端口号。
如果您无法提供副本集中的完整主机列表,您可以指定单个或部分主机,并指示驱动程序按照以下方式之一进行自动发现
将副本集的名称指定为
replicaSet
参数的值将
directConnection
参数的值指定为false
指定副本集中的多个主机
提示
尽管您可以指定副本集中主机的子集,但请包括副本集中的所有主机,以确保驱动程序能够在某些主机不可达时建立连接。
以下示例展示了如何使用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);