Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Elija un destino de conexión

En esta guía, puedes aprender cómo utilizar una cadena de conexión y MongoClient objeto para conectarse a diferentes tipos de implementaciones de MongoDB.

Para conectarte a una implementación de MongoDB en Atlas, incluye los siguientes elementos en tu cadena de conexión:

  • URL de tu clúster de Atlas

  • Nombre de usuario de MongoDB

  • Contraseña de MongoDB

Luego, pase la cadena de conexión al constructor MongoClient.

Tip

Sigue el Guía de conexión del controlador Atlas para recuperar tu cadena de conexión.

Cuando se conecte a Atlas, se recomienda utilizar la opción de cliente de Stable API para evitar cambios disruptivos al actualizar a una nueva versión de MongoDB Server en Atlas. Para obtener más información sobre la funcionalidad Stable API, consulta Página API estable.

El siguiente código muestra cómo utilizar PyMongo para conectarse a un clúster de Atlas. El código también utiliza la opción server_api para especificar una Stable API. Selecciona el Synchronous o la pestaña Asynchronous para ver el código correspondiente:

from pymongo import MongoClient
from pymongo.server_api import ServerApi
# Replace the placeholder with your Atlas connection string
uri = "<connection string>"
# Create a MongoClient with a MongoClientOptions object to set the Stable API version
client = MongoClient(uri, server_api=ServerApi(
version='1', strict=True, deprecation_errors=True))
try:
# Connect the client to the server (optional starting in v4.7)
client.connect()
# Send a ping to confirm a successful connection
client.admin.command({'ping': 1})
print("Pinged your deployment. You successfully connected to MongoDB!")
finally:
# Ensures that the client will close when you finish/error
client.close()
import asyncio
from pymongo import AsyncMongoClient
from pymongo.server_api import ServerApi
async def main():
# Replace the placeholder with your Atlas connection string
uri = "<connection string>"
# Create a MongoClient with a MongoClientOptions object to set the Stable API version
client = AsyncMongoClient(uri, server_api=ServerApi(
version='1', strict=True, deprecation_errors=True))
try:
# Send a ping to confirm a successful connection
await client.admin.command({'ping': 1})
print("Pinged your deployment. You successfully connected to MongoDB!")
finally:
# Ensures that the client will close when you finish/error
await client.close()
asyncio.run(main())

Para conectarse a una implementación local de MongoDB, use localhost como el nombre de host. Por defecto, el proceso mongod se ejecuta en el puerto 27017, aunque puedes personalizarlo para tu implementación.

El siguiente código muestra como usar PyMongo para conectarse a una implementación local de MongoDB. Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente:

from pymongo import MongoClient
uri = "mongodb://localhost:27017/"
client = MongoClient(uri)
from pymongo import AsyncMongoClient
uri = "mongodb://localhost:27017/"
client = AsyncMongoClient(uri)

Para conectar a un set de réplicas, especifique los nombres de host (o direcciones IP) y los números de puerto de los miembros del set de réplicas en su cadena de conexión.

El siguiente código muestra cómo usar PyMongo para conectarse a un conjunto de réplicas que contiene tres hosts. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:

from pymongo import MongoClient
client = MongoClient("mongodb://host1:27017,host2:27017,host3:27017")
from pymongo import AsyncMongoClient
client = AsyncMongoClient("mongodb://host1:27017,host2:27017,host3:27017")

Si no puede proporcionar una lista completa de hosts en el conjunto de réplicas, puede especificar uno o más de ellos e indicarle a PyMongo que realice la detección automática para encontrar los demás. Para indicarle al controlador que realice la detección automática, realice una de las siguientes acciones:

  • Especifique el nombre del set de réplicas como el valor del parámetro replicaSet.

  • Especifique false como el valor del parámetro directConnection.

  • Especifica más de un host en el conjunto de réplicas.

En el siguiente ejemplo, el driver utiliza un URI de conexión de muestra para conectarse al set de réplicas de MongoDB sampleRS, que se ejecuta en el puerto 27017 de tres hosts diferentes, incluido host1. Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente:

from pymongo import MongoClient
uri = "mongodb://host1:27017/?replicaSet=sampleRS"
client = MongoClient(uri)
from pymongo import AsyncMongoClient
uri = "mongodb://host1:27017/?replicaSet=sampleRS"
client = AsyncMongoClient(uri)

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.

PyMongo distribuye uniformemente las operaciones entre las implementaciones accesibles dentro del localThresholdMS valor del cliente. Para obtener más información sobre cómo PyMongo distribuye las operaciones entre varias implementaciones de MongoDB, consulte la guía "Personalizar la selección del servidor".

Nota

El constructor MongoClient es no bloqueante. Al conectarse a un set de réplicas, el constructor devuelve el control inmediatamente mientras el cliente utiliza hilos en segundo plano para conectarse al set de réplicas.

Si construye un MongoClient e imprime inmediatamente la representación de cadena de su atributo nodes, la lista podría estar vacía mientras el cliente se conecta a los miembros del set de réplicas.

Para inicializar un set de réplicas, debe conectarse directamente a un único nodo. Para ello, establece la opción de conexión directConnection en True. Para ello, puede pasar un argumento al constructor MongoClient o a través de un parámetro en su cadena de conexión.

from pymongo import MongoClient
client = MongoClient("mongodb://<hostname>:<port>",
directConnection=True)
from pymongo import MongoClient
uri = ("mongodb://<hostname>:<port>/?"
"directConnection=true")
client = MongoClient(uri)
from pymongo import AsyncMongoClient
client = AsyncMongoClient("mongodb://<hostname>:<port>",
directConnection=True)
from pymongo import AsyncMongoClient
uri = ("mongodb://<hostname>:<port>/?"
"directConnection=true")
client = AsyncMongoClient(uri)

Para utilizar el descubrimiento de servicios DNS para buscar el registro DNS SRV del servicio al que te estás conectando, deber especificar el formato de conexión SRV en tu cadena de conexión. Además, si habilitas el formato de conexión SRV, PyMongo vuelve a buscar automáticamente nuevos hosts sin necesidad de cambiar la configuración del cliente.

El siguiente código muestra una cadena de conexión que utiliza el formato de conexión SRV:

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.

Si intenta conectarse a MongoDB Server v3.6 o anterior, PyMongo podría generar el siguiente error:

pymongo.errors.ConfigurationError: Server at localhost:27017 reports wire version 6, but this version of PyMongo requires at least 7 (MongoDB 4.0).

Esto ocurre cuando la versión del controlador es demasiado nueva para el servidor al que se está conectando. Para resolver este problema, puede realizar una de las siguientes acciones:

  • Actualiza tu implementación de MongoDB a la v4.0 o posterior.

  • Haz el downgrade a PyMongo 4.10 o una versión anterior, que admite MongoDB Server v3.6 y posteriores.

  • Haz downgrade a PyMongo v3.x, que es compatible con MongoDB Server v2.6 y posteriores.

Una excepción AutoReconnect indica que ha ocurrido un failover. Esto significa que PyMongo ha perdido su conexión con el miembro principal original del set de réplicas, y que su última operación podría haber fallado.

Cuando ocurre este error, PyMongo intenta automáticamente encontrar el nuevo nodo primario para las operaciones posteriores. Para gestionar el error, tu aplicación debe realizar una de las siguientes acciones:

  • Reintentar la operación que podría haber fallado

  • Continúe corriendo, con el entendimiento de que la operación podría haber fallado.

Importante

PyMongo arroja un error AutoReconnect en todas las operaciones hasta que el set de réplicas elige un nuevo miembro primario.

Si intentas conectar a un set de réplicas de MongoDB a través de un túnel SSH, recibirás el siguiente error:

File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 1560, in count
return self._count(cmd, collation, session)
File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 1504, in _count
with self._socket_for_reads() as (connection, slave_ok):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/Library/Python/2.7/site-packages/pymongo/mongo_client.py", line 982, in _socket_for_reads
server = topology.select_server(read_preference)
File "/Library/Python/2.7/site-packages/pymongo/topology.py", line 224, in select_server
address))
File "/Library/Python/2.7/site-packages/pymongo/topology.py", line 183, in select_servers
selector, server_timeout, address)
File "/Library/Python/2.7/site-packages/pymongo/topology.py", line 199, in _select_servers_loop
self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: timed out

Esto ocurre porque PyMongo descubre los miembros del set de réplicas utilizando la respuesta del comando isMaster, que contiene las direcciones y los puertos de los otros miembros del set de réplicas. Sin embargo, no puedes acceder a estas direcciones y puertos a través del túnel SSH.

En su lugar, puedes conectarte directamente a un solo nodo de MongoDB utilizando la opción directConnection=True con tunelización SSH.

Para aprender más sobre cómo crear un objeto MongoClient en PyMongo, consulta la siguiente documentación de API:

Volver

Crea un MongoClient

En esta página