En esta guía, puede aprender cómo conectarse a un Implementación de MongoDB Atlas, una instancia de MongoDB o un conjunto de réplicas que utiliza el controlador Java.
Puede ver un código de muestra para conectarse a un clúster Atlas o continuar leyendo para obtener más información sobre el MongoClient URI de clase y conexión.
MongoClient
Puede conectarse y comunicarse con MongoDB mediante la MongoClient clase. Para crear un MongoClientSettingsPara crear un objeto,utilice el método y los métodos de cadena para especificar la configuración. Después de encadenarlos, utilice el MongoClientSettings.builder() build() método para crear el MongoClientSettings objeto.
Para obtener más información sobre las diferentes configuraciones que puede utilizar para controlar el comportamiento de su MongoClient, consulte la Especifique la guía de configuración de MongoClient.
Ejemplo
En este ejemplo, se muestra la especificación de un ConnectionString:
MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .build());
Nota
Orden de encadenamiento
Algunas opciones de la configuración se asignan a una opción de cadena de conexión. Si especificas las mismas opciones en tu configuración y en la cadena de conexión, el orden en que las encadenas determina la opción que utiliza el driver. El driver usa la última configuración que lee.
Por ejemplo, este snippet contiene configuraciones con los siguientes tiempos para que el driver se conecte a un socket disponible:
La cadena de conexión especifica dentro de
2 SECONDSLa configuración del socket se especifica en
5 SECONDS.
MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder().applyConnectionString(new ConnectionString("mongodb+srv://<db_username>:<db_password>@<hostname>:<port>/<auth db>?connectTimeoutMS=2000")) .applyToSocketSettings(builder -> builder.connectTimeout(5L, SECONDS)) .build());
Como el driver lee las opciones de configuración del socket al final, espera conectarse a un socket disponible en un plazo de 5 SECONDS antes de caducar.
Importante
Reutilizar el cliente
Dado que cada MongoClient representa un grupo seguro para subprocesos de conexiones a la base de datos, la mayoría de las aplicaciones solo requieren una única instancia de MongoClient, incluso en varios subprocesos. Todos los límites de uso de recursos, como el máximo de conexiones, se aplican a instancias individuales de MongoClient.
Tip
Llama siempre a MongoClient.close() para limpiar recursos cuando una instancia ya no sea necesaria.
URI de conexión
El URI de conexión proporciona un conjunto de instrucciones que el driver utiliza para conectarte a una implementación de MongoDB. Instruye al driver sobre cómo debe conectarse a MongoDB y cómo debe comportarse mientras está conectado. En la siguiente figura, se explica cada parte de un URI de conexión de muestra:

En este ejemplo, te conectas a una implementación de Atlas MongoDB que tiene un registro DNS SRV. Para obtener más información, consulta la sección Descubrimiento de servicios DNS de esta guía.
Nota
Si tu implementación está en MongoDB Atlas, consulta la Guía de conexión del driver Atlas y selecciona Java en el menú desplegable de lenguaje para recuperar tu cadena de conexión.
Si te conectas a una instancia o set de réplicas que no tiene una dirección DNS SRV, debes utilizar mongodb para el protocolo, que especifica el Formato estándar de cadena de conexión.
Tras el protocolo, la cadena de conexión contiene tus credenciales si estás usando un mecanismo de autenticación basado en contraseña. Sustituye el valor de user por tu nombre de usuario y pass por tu contraseña. Si tu mecanismo de autenticación no requiere credenciales, omite esta parte del URI de conexión.
La siguiente parte del URI de conexión especifica el nombre de host o la dirección IP, seguido del puerto de tu instancia de MongoDB. En el ejemplo, sample.host representa el nombre de host y 27017 es el número de puerto. Reemplaza estos valores para hacer referencia a tu instancia de MongoDB.
La última parte del URI de conexión contiene opciones de conexión como parámetros. En el ejemplo, se han establecido dos opciones de conexión: maxPoolSize=20 y w=majority. Para obtener más información sobre las opciones de conexión, se puede ir a la sección Stable API de esta guía.
Detección de servicios DNS
Para utilizar la detección de servicios DNS para buscar el registro DNS SRV del servicio al que te estás conectando, especifica el formato de conexión SRV en tu cadena de conexión. Si especificas este formato, el driver de Java vuelve a buscar nuevos hosts automáticamente. Tu implementación puede agregar hosts a tu topología sin necesidad de cambios en la configuración de tu cliente.
El siguiente código muestra una cadena de conexión que utiliza el formato de conexión SRV:
String uri = "mongodb+srv://<hostname>/";
Para aprender más sobre el formato de conexión SRV, consulta la entrada Formato de conexión SRV en el manual de MongoDB Server.
Ejemplo de Conexión de Atlas
Para conectarte a una implementación de MongoDB en Atlas, crea un cliente. Puedes crear un cliente que use tu cadena de conexión y otras opciones del cliente si trasladas un objeto MongoClientSettings al método MongoClients.create().
Para crear una instancia de un objeto MongoClientSettings, utiliza el método del compilador para especificar tu cadena de conexión y cualquier otra opción de cliente y, a continuación, llama al método build(). Encadena el método applyConnectionString() al compilador para especificar el URI de tu conexión.
Puedes configurar la opción de cliente Stable API para evitar cambios disruptivos al actualizarte a una nueva versión de MongoDB Server. Para aprender más sobre la funcionalidad Stable API, consulta la página de Stable API.
El siguiente código muestra cómo se puede especificar la cadena de conexión y la opción de cliente de la Stable API al conectarse a una implementación de MongoDB en Atlas y verificar que la conexión sea exitosa:
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); } } } }
Otras formas de conectarse a MongoDB
Si te estás conectando a una única implementación o set de réplicas de MongoDB que no está alojado en Atlas, consulta las siguientes secciones para saber cómo conectarte.
Conéctate a una implementación de MongoDB en tu máquina local
Si necesitas ejecutar una implementación de MongoDB en tu máquina local para fines de desarrollo en lugar de usar un clúster de Atlas, debes completar lo siguiente:
Instale y configure MongoDB Server.
Inicia la implementación.
Importante
Protege siempre tu implementación de MongoDB contra ataques maliciosos. Consulta nuestra Lista de verificación de seguridad para ver una lista de recomendaciones de seguridad.
Después de iniciar correctamente la implementación de MongoDB, especifica la cadena de conexión en el código de conexión del driver.
Si la implementación de MongoDB se está ejecutando localmente, puedes usar la cadena de conexión "mongodb://localhost:<port>" donde <port> es el número de puerto que configuraste para que el servidor escuche las conexiones entrantes.
Si debes especificar un nombre de host o una dirección IP diferente, consulta nuestra entrada del Manual del servidor sobre Cadenas de conexión.
Para probar si es posible conectarse a la implementación, se debe reemplazar la cadena de conexión en el ejemplo de código Conectar a MongoDB Atlas y ejecutarla.
Conectarse a un set de réplicas
Una implementación de un set de réplicas de MongoDB es un grupo de instancias conectadas que almacenan el mismo conjunto de datos. Esta configuración de instancias proporciona redundancia de datos y alta disponibilidad de datos.
Para conectarte a la implementación de un set de réplicas, especifica los nombres de host (o direcciones IP) y los números de puerto de los nodos del set de réplicas.
Si no puedes proporcionar una lista completa de los hosts del set de réplicas, puedes especificar uno o un subconjunto de los hosts de la réplica e indicar al driver que realice el descubrimiento automático de una de las siguientes formas:
Especifica el nombre del set de réplicas como valor del parámetro
replicaSet.Especifica
falsecomo el valor del parámetrodirectConnection.Especifica más de un host en el set de réplicas
Tip
Si bien puedes especificar un subconjunto de hosts en un set de réplicas, incluye todos los hosts en el set de réplicas para asegurarte de que el driver pueda establecer la conexión si no se puede acceder a uno de los hosts.
En los siguientes ejemplos, se muestra cómo especificar varios hosts para una instancia de MongoClient con la clase ConnectionString o MongoClientSettings. Selecciona la pestaña que corresponde a tu clase preferida.
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);
Nota
Set de réplicas en Docker
Cuando un set de réplicas se ejecuta en Docker, se podría exponer solo un punto final de MongoDB. En este caso, el set de réplicas no se puede detectar. Si se especifica directConnection=false en la URI de conexión, o se deja esta opción sin configurar, puedes evitar que tu aplicación se conecte a ella.
En un entorno de prueba o desarrollo, se puede conectar al set de réplicas especificando directConnection=true. En un entorno de producción, se recomienda configurar el clúster para que cada instancia de MongoDB sea accesible fuera de la red virtual de Docker.
Preguntas frecuentes
En esta sección, se brindan respuestas a las preguntas que pueden surgir al conectarse a MongoDB.
¿Por qué hay dos tipos de MongoClient en el driver de Java?
Hay dos tipos de MongoClient porque queríamos una API más limpia para los nuevos usuarios que no tuvieran la confusión de incluir varios CRUD con frecuencia como AsAPI. Queríamos asegurarnos de que la nueva API CRUD estuviera disponible en una estructura de paquetes Java que funcionara bien con el soporte de módulos Java introducido en Java 9.
¿Qué tipo de MongoClient se debe usar?
Las aplicaciones nuevas generalmente utilizan la interfaz com.mongodb.client.MongoClient, que admite las siguientes funcionalidades:
Configuración con
MongoClientSettingsyConnectionString. Puedes crear instancias de esta interfaz con métodos de fábrica definidos en la clasecom.mongodb.client.MongoClients.Accede a la API CRUD mediante
MongoDatabasey, desde allí,MongoCollection.
Utiliza la clase com.mongodb.MongoClient si necesitas soporte para la API heredada, que admite las siguientes funcionalidades:
Configuración mediante
MongoClientOptionsyMongoClientURI.Accede a la API CRUD mediante
DBy, desde allí,DBCollection. Puedes acceder a esta API con el métodogetDB().
Para las aplicaciones que requieren una combinación de API nuevas y heredadas, com.mongodb.MongoClient también admite las siguientes funcionalidades:
Configuración mediante
MongoClientSettingsyConnectionString; la única diferencia es que creas instancias mediante constructores en lugar de una clase de fábrica.Accede a la API CRUD mediante
MongoDatabasey, desde allí,MongoCollection. Puedes acceder a esta API con el métodogetDatabase().
¿Cómo se puede evitar el error “java.lang.NoClassDefFoundError: com/mongodb/MongoClient”?
Puede producirse una excepción java.lang.NoClassDefFoundError cuando el entorno de ejecución de Java no pueda localizar un archivo de clase en el tiempo de ejecución. Cuando se intenta ejecutar el código de una aplicación que utilice el driver Java de MongoDB, se deben incluir los archivos JAR adecuados del driver en la ruta de clases.
Si se produce este error después de agregar los archivos JAR del driver de Java a la ruta de clases, deben verificarse los siguientes elementos en tu entorno:
Los archivos JAR están en las ubicaciones especificadas por la ruta de clase.
La sintaxis de la ruta de clase es correcta.
Si defines la ruta de clases en una variable de entorno, el entorno de ejecución de Java utiliza esa variable.
Si utilizas un administrador de dependencias, no informa de ningún conflicto sin resolver.
Tip
Este error contiene el nombre del paquete y la clase, que puede ayudarte a identificar qué JAR de driver podría faltar en tu ruta de clases. Para localizar el driver JAR al que se refiere el error, consulta cada una de las entradas en la documentación de la API.
¿Cómo se puede evitar el error “com.mongodb.MongoSecurityException”?
Tu aplicación podría generar esta excepción si especificas credenciales no válidas o con formato incorrecto al conectarte a una implementación de MongoDB.
Si recibes este error cuando intentas conectarte a una implementación de MongoDB, verifica los siguientes elementos de tu código:
El URI de conexión corresponde a la implementación de MongoDB correcta. Para aprender más sobre cómo configurar tu URI de conexión, consulta URI de conexión.
Las credenciales para el mecanismo de autenticación que especificaste son correctas. Para aprender cómo especificar tus credenciales, consulta la guía de Mecanismos de autenticación.
El nombre de la base de datos de autenticación que has especificado es correcto. Para aprender a configurar los usuarios y roles para tu implementación de MongoDB, consulta Administrar usuarios y roles en la documentación del servidor.
¿Cómo se puede evitar el error “IllegalStateException: state should be: open”?
Puede producirse esta excepción si llamas a una operación en una instancia MongoClient que cerró sus conexiones con MongoDB. Una vez que se llama al método close() en el MongoClient, cualquier otra llamada de operación en esa instancia generará esta excepción.
Para evitar esta excepción, no llames a operaciones en la instancia MongoClient después de cualquier código que llame a close() en ella.
Tip
El código que cierra la instancia MongoClient puede ser difícil de ubicar en ciertos casos. Para encontrar posibles orígenes de esta excepción, busca los siguientes casos:
Llamadas a
close()en una instanciaMongoClientLa operación llama a una instancia
MongoClientque está fuera del alcance de la instrucción try-with-resources en la que se declara elMongoClient.
Si tu aplicación utiliza un marco para gestionar el MongoClient, como Spring Boot, consulta la documentación del marco para ubicar las mejores prácticas para gestionar el comportamiento de la conexión.
Para aprender más sobre cómo acceder a MongoDB desde Spring Boot, consulta Spring Boot y MongoDB.