Overview
En esta guía, puedes aprender cómo configurar operaciones de lectura y escritura en PyMongo.
Ajustes de lectura y guardar
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).
De forma predeterminada, las bases de datos heredan estas configuraciones de la MongoClient Las instancias y colecciones las heredan de la base de datos. Sin embargo, puede cambiar esta configuración en su base de datos o colección mediante 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, preocupación de lectura y preferencia de escritura.collection.with_options():Obtiene la colección y aplica la preferencia de lectura, la preocupación 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, llame al método y pase el nombre de la colección o base de datos y la nueva preferencia de lectura, preocupación 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 número ReadPreference, consulta el
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:
Conjuntos de etiquetas
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 las lecturas del centro de datos de Nueva York ('dc': 'ny') y recurra al centro de datos de San Francisco ('dc': 'sf'):
db = client.get_database( 'test', read_preference=Secondary([{'dc': 'ny'}, {'dc': 'sf'}]))
Umbral local
Si varios miembros del set de réplicas coinciden con la preferencia de lectura y los conjuntos de etiquetas que especificas, PyMongo lee desde los miembros del set de réplicas más cercanos, elegidos según su tiempo de ping.
Por defecto, el driver utiliza solo aquellos nodos cuyos tiempos de ping están dentro de 15 milisegundos del nodo más cercano para las queries. Para distribuir las lecturas entre miembros con mayor latencia, pase la opción localThresholdMS al constructor MongoClient().
El siguiente ejemplo especifica un umbral local de 35 milisegundos. Seleccione el Synchronous o la pestaña 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 localThresholdMS al comunicarse con un conjunto de réplicas a través de una mongos instancia. En este caso, use la opción de línea de comandos localThreshold.
Lecturas y Guardados Reintentarles
PyMongo vuelve a intentar automáticamente ciertas operaciones de lectura y escritura una sola vez si fallan debido a un error de red o 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.
Intercalación
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'))