Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Configurar las operaciones CRUD

En esta guía, puedes aprender cómo configurar operaciones de lectura y escritura en PyMongo.

Puedes controlar cómo el driver direcciona las operaciones de lectura configurando una preferencia de lectura. También puede controlar las opciones de cómo el driver espera la confirmación de las operaciones de lectura y escritura en un set de réplicas configurando un nivel de consistencia de lectura y un nivel de confirmación de escritura (write concern).

Por defecto, las bases de datos heredan estas configuraciones de la instancia MongoClient, y las colecciones las heredan de la base de datos. Sin embargo, puedes cambiar estos ajustes en tu base de datos o colección utilizando uno de los siguientes métodos:

  • get_database(): Obtiene la base de datos y aplica la preferencia de lectura del cliente, el nivel de consistencia de lectura y la preferencia de escritura.

  • database.with_options(): Obtiene la base de datos y aplica su preferencia de lectura actual, nivel de consistencia de lectura y preferencia de escritura.

  • get_collection(): Obtiene la colección y aplica su preferencia de lectura actual, nivel de consistencia de lectura y preferencia de escritura.

  • collection.with_options()Obtiene la colección y aplica la preferencia de lectura, el nivel de consistencia de lectura y la preferencia de escritura de la base de datos.

Para cambiar la configuración de lectura o escritura con los métodos anteriores, llama al método e introduce el nombre de la colección o de la base de datos y la nueva preferencia de lectura, nivel de consistencia de lectura o preferencia de escritura.

El siguiente ejemplo muestra cómo cambiar la preferencia de lectura, el nivel de consistencia de lectura y la preferencia de escritura de una base de datos llamada test-database con el método get_database():

client.get_database("test-database",
read_preference=ReadPreference.SECONDARY,
read_concern="local",
write_concern="majority")

El siguiente ejemplo muestra cómo cambiar la configuración de lectura y guardado de una colección llamada test-collection con el método get_collection():

database.get_collection("test-collection",
read_preference=ReadPreference.SECONDARY,
read_concern="local",
write_concern="majority")

El siguiente ejemplo muestra cómo cambiar la configuración de lectura y guardado de una colección llamada test-collection con el método with_options():

collection.with_options(read_preference=ReadPreference.SECONDARY,
read_concern="local",
write_concern="majority")

Tip

Para ver los tipos de preferencias de lectura disponibles en el ReadPreference enum, consulta la documentación de la API.

Para obtener más información sobre la configuración de lectura y escritura, consulta las siguientes guías en el manual del servidor MongoDB:

En MongoDB Server, puedes aplicar etiquetas de clave-valor a los miembros de un conjunto de réplicas según los criterios que elijas. Luego, puede usar esas etiquetas para dirigir una operación de lectura a uno o más nodos.

Por defecto, PyMongo ignora las etiquetas al elegir un nodo del que leer. Para indicar a PyMongo que prefiera ciertas etiquetas, páselos como un parámetro al constructor de clase de preferencia de lectura.

En el siguiente ejemplo de código, el conjunto de etiquetas pasado al parámetro read_preference le indica a PyMongo que prefiera leer desde el centro de datos de Nueva York ('dc': 'ny') y que recurra al centro de datos de San Francisco ('dc': 'sf'):

db = client.get_database(
'test', read_preference=Secondary([{'dc': 'ny'}, {'dc': 'sf'}]))

Cuando se conecta a un set de réplicas con una preferencia de lectura que no es primaria, el driver lee del miembro elegible más cercano del set de réplicas dentro de la ventana de latencia. Al conectarse a un clúster fragmentado, el controlador selecciona entre todas las instancias mongos accesibles dentro de la ventana de latencia. Para aprender sobre los modos de preferencia de lectura, consulte Preferencia de lectura.

Por defecto, el controlador utiliza únicamente los servidores cuyos tiempos de ping se encuentren dentro de 15 milisegundos del servidor elegible más cercano.

Por ejemplo, supongamos que su set de réplicas tiene cinco nodos y el nodo más cercano tiene un tiempo de ping de 5 milisegundos. Con el valor por defecto de localThresholdMS de 15 milisegundos, solo los nodos con un tiempo de ping de 20 milisegundos o menos están dentro de la ventana de latencia, como se muestra en la tabla siguiente:

host
Tipo
Tiempo de ping
Dentro de la Ventana de Latencia

host1

Primario

5ms

host2

secundario

9ms

host3

secundario

13ms

host4

secundario

24ms

No

host5

secundario

42ms

No

Para ajustar la ventana de latencia, pasa la opción localThresholdMS al constructor MongoClient().

El siguiente ejemplo especifica un umbral local de 35 milisegundos. Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente:

client = MongoClient(replicaSet='repl0',
readPreference=ReadPreference.SECONDARY_PREFERRED,
localThresholdMS=35)
client = AsyncMongoClient(replicaSet='repl0',
readPreference=ReadPreference.SECONDARY_PREFERRED,
localThresholdMS=35)

En el ejemplo anterior, PyMongo distribuye las lecturas entre los nodos coincidentes dentro de 35 milisegundos del tiempo de ping del nodo más cercano.

Nota

PyMongo ignora el valor de localThresholdMS al comunicarse con un set de réplicas a través de una instancia mongos. En este caso, utiliza la opción de línea de comandos localThreshold.

PyMongo reintenta automáticamente ciertas operaciones de lectura y escritura una sola vez si fallan debido a un error de red o del servidor.

Puedes desactivar explícitamente lecturas reintentarles (retryable) o escrituras reintentarles configurando la opción retryReads o retryWrites en False en el constructor MongoClient(). El siguiente ejemplo deshabilita las lecturas y escrituras reintentables para un cliente. Selecciona la pestaña Synchronous o Asynchronous para ver el código correspondiente:

client = MongoClient("<connection string>",
retryReads=False, retryWrites=False)
client = AsyncMongoClient("<connection string>",
retryReads=False, retryWrites=False)

Para obtener más información sobre las operaciones de lectura repetibles admitidas, consulte Lecturas repetibles en el manual de MongoDB Server. Para obtener más información sobre las operaciones de escritura reintentables admitidas, consulta Escrituras reintentables en el manual del MongoDB Server.

Puedes configurar cómo gestiona PyMongo las operaciones cuando un servidor devuelve un error de sobrecarga utilizando las siguientes opciones de cliente:

  • enable_overload_retargetingEspecifica si el driver da menor prioridad a un servidor que devuelve un error de sobrecarga, reduciendo la probabilidad de reintentar en el mismo servidor sobrecargado. El valor por defecto es False.

  • max_adaptive_retriesEspecifica el número máximo de veces que el controlador vuelve a intentar una operación cuando un servidor devuelve un error de sobrecarga. El valor por defecto es 2.

El siguiente ejemplo crea un MongoClient y configura las opciones de reintento por sobrecarga. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:

client = MongoClient("<connection string>",
enable_overload_retargeting=True,
max_adaptive_retries=3)
client = AsyncMongoClient("<connection string>",
enable_overload_retargeting=True,
max_adaptive_retries=3)

Cuando creas una colección, puedes especificar una intercalación por defecto para todas las operaciones que realices en la colección.

Una intercalación es un conjunto de reglas específicas del lenguaje para la comparación de strings, como el uso de mayúsculas y minúsculas y las marcas de acento.

Para especificar una intercalación, crear una instancia de la clase Collation o un diccionario de Python. Para una lista de opciones que pueda pasar al constructor Collation o incluir como claves en el diccionario, consultar Intercalación en el manual de MongoDB Server.

Tip

Intercalación de importación

Para crear una instancia de la clase Collation, se debe importar desde pymongo.collation.

El siguiente ejemplo crea la misma colección que el ejemplo anterior, pero con una intercalación por defecto de fr_CA. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:

from pymongo.collation import Collation
database = client["test_database"]
database.create_collection("example_collection", collation=Collation(locale='fr_CA'))
from pymongo.collation import Collation
database = client["test_database"]
await database.create_collection("example_collection", collation=Collation(locale='fr_CA'))